Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Arrays.asList返回固定大小的列表?_Java_List - Fatal编程技术网

Java 为什么Arrays.asList返回固定大小的列表?

Java 为什么Arrays.asList返回固定大小的列表?,java,list,Java,List,Arrays.asList是一种有用且方便的方法,但它返回一个大小固定的List,这样就不能使用add或remove添加或删除元素(抛出UnsupportedOperationException) 有什么好的理由吗?对我来说,这似乎是一个奇怪的限制 报告没有解释其背后的原因: 返回指定数组支持的固定大小列表 关键是Arrays.asList返回数组的视图,对数组的更改反映在List中,反之亦然。它不是复制,它只是列表接口的一个非常简单的实现,该接口将指定数组解释为列表。因此,Arrays.asL

Arrays.asList
是一种有用且方便的方法,但它返回一个大小固定的
List
,这样就不能使用
add
remove
添加或删除元素(抛出
UnsupportedOperationException

有什么好的理由吗?对我来说,这似乎是一个奇怪的限制

报告没有解释其背后的原因:

返回指定数组支持的固定大小列表


关键是
Arrays.asList
返回数组的视图,对数组的更改反映在
List
中,反之亦然。它不是复制,它只是
列表
接口的一个非常简单的实现,该接口将指定数组解释为
列表
。因此,
Arrays.asList
实际上只是反映了Java数组也是固定大小的。您也不能从备份数组中添加或删除元素

如注释中所述,从数组中获取可变大小的列表非常容易,例如
newarraylist(Arrays.asList(array))


还有,值得一提的是:Guava在发现大多数使用它的人确实想要一个不可变的列表后,实际上提供了一个“来自varargs参数的可调整大小的列表”方法。

创建另一个列表,例如
new ArrayList(asList(…)
new LinkedList(asList(…)
文档确实说它会返回“指定数组的列表视图”,因此将其固定大小应该是有意义的。