3 回答
TA贡献1827条经验 获得超9个赞
Array.asList() 在列表接口中包装一个数组。该列表仍受阵列支持。数组是固定大小的-它们不支持添加或删除元素,因此包装器也不能。
文档并未尽其所能,但他们确实说:
返回由指定数组支持的固定大小的列表。
“固定大小”位应暗示您不能添加或删除元素:)
尽管还有其他解决方法(通过其他方法ArrayList从数组创建新方法)而无需额外的库,但我个人还是建议您掌握Google收藏库(或发布时的Guava)。然后,您可以使用:
List<Integer> list = Lists.newArrayList(array);
我建议这样做的原因是,GCL通常是一件好事,值得使用。
如注释中所述,这将获取数组的副本。该列表不受原始数组的支持,并且任何一个集合中的更改都不会在另一个集合中看到。
TA贡献1807条经验 获得超9个赞
不是java.util.ArrayList。Arrays.asList()返回其自己的List实现(将更改“直写”到数组中。)。
这是一个固定大小的列表,因此不支持删除。
您可以从中创建实物ArrayList:
new java.util.ArrayList<>(Arrays.asList(someArray));
asList()我必须承认,这是非常令人困惑的。
TA贡献2051条经验 获得超10个赞
请阅读Arrays.asList()的API文档:
返回由指定数组支持的固定大小的列表。(更改为将返回列表“直写”到数组。)
请注意,在Javadocs中,Collections.remove(int)被标记为“可选操作”,这意味着并非所有Collections都将支持它。“固定大小的列表”意味着您无法更改列表的大小,而remove()会这样做。因此不支持。
如果要更改Arrays.asList()生成的列表,只需复制它,例如new ArrayList(Arrays.asList(...))。
添加回答
举报