Arrays类中asList方法究竟返回什么?

snowlandhg 2010-10-27 10:02:20

private String[] nums = { "one", "two", "three" };
List< String > list = Arrays.asList( nums );
list.add( "five" );


运行到add方法时报错;java.lang.UnsupportedOperationException

将代码第二行改为

List< String > list = new ArrayList< String > ( Arrays.asList( nums ) );

此时运行正常
那么,asList方法究竟返回的是什么?是像iterator一样的镜像?
麻烦说详细一点
...全文
788 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
phx8742 2010-10-28
  • 打赏
  • 举报
回复
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}

private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable

//下面是 extends AbstractList<E>内的方法 所以报java.lang.UnsupportedOperationException
public boolean add(E e) {
add(size(), e);
return true;
}

public void add(int index, E element) {
throw new UnsupportedOperationException();
}
phx8742 2010-10-28
  • 打赏
  • 举报
回复
看API

返回一个受指定数组支持的固定大小的列表。
TearsStoneJava 2010-10-28
  • 打赏
  • 举报
回复
返回java.util.Arrays.ArrayList,而不是java.util.ArrayList。

public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
Miracle1216 2010-10-28
  • 打赏
  • 举报
回复
楼上都说了
pywepe 2010-10-28
  • 打赏
  • 举报
回复
固定大小 不可变的List
clclydj02 2010-10-28
  • 打赏
  • 举报
回复
LZ会报:java.lang.UnsupportedOperationException
是因为你已经定义了List< String > list = Arrays.asList( nums );
这时候list是固定不变的了,不能再往里面+东西了,你在add肯定报错。
6L正解:asList返回的List大小是固定,只能读,不能改!
ren_xu123 2010-10-28
  • 打赏
  • 举报
回复
package BossTest;

import java.util.*;
public class ToList {
public static void main(String arg0[]){
String[] nums = { "one", "two", "three" };
List< String > list = Arrays.asList( nums );
list.add( "five" );
}
}

asList返回的List大小是固定,只能读,不能改!
michaellufhl 2010-10-28
  • 打赏
  • 举报
回复
返回java.util.Arrays.ArrayList,而不是java.util.ArrayList。
gujinf2008 2010-10-28
  • 打赏
  • 举报
回复
返回一个受指定数组支持的固定大小的列表。
宁波朱超 2010-10-28
  • 打赏
  • 举报
回复
你放了一個數組 還放一個字符串 你說你折騰么。
雖然說該放OBJECT 但也太那個了 。。。
precious 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ren_xu123 的回复:]
package BossTest;

import java.util.*;
public class ToList {
public static void main(String arg0[]){
String[] nums = { "one", "two", "three" };
List< String > list = Arrays.asList( nums );
list……
[/Quote]
+1
dinglimin2009 2010-10-28
  • 打赏
  • 举报
回复
每天进步一点点
mengyalizuopeng 2010-10-28
  • 打赏
  • 举报
回复
呵呵,这种东西就是好在实践中才能发现,印象深刻。
ETCentury 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 clclydj02 的回复:]

LZ会报:java.lang.UnsupportedOperationException
是因为你已经定义了List< String > list = Arrays.asList( nums );
这时候list是固定不变的了,不能再往里面+东西了,你在add肯定报错。
6L正解:asList返回的List大小是固定,只能读,不能改!
[/Quote]

学习下~!
wyang1991 2010-10-27
  • 打赏
  • 举报
回复
注意是 固定大小
wyang1991 2010-10-27
  • 打赏
  • 举报
回复
API中说的很清楚:

返回一个受指定数组支持的固定大小的列表。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧