为了账号安全,请及时绑定邮箱和手机立即绑定

尝试从Array.asList返回的列表中删除时,出现UnsupportedOperation

尝试从Array.asList返回的列表中删除时,出现UnsupportedOperation

FFIVE 2019-11-18 18:12:56
我正在使用List来保存通过调用Array.asList()方法获得的一些数据。然后我试图使用myList.Remove(int i)方法删除一个元素。但是当我尝试这样做的时候,我却得到了回报UnsupportedOperationException。这是什么原因呢?我应该如何解决这个问题?
查看完整描述

3 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

Array.asList() 在列表接口中包装一个数组。该列表仍受阵列支持。数组是固定大小的-它们不支持添加或删除元素,因此包装器也不能。


文档并未尽其所能,但他们确实说:


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


“固定大小”位应暗示您不能添加或删除元素:)


尽管还有其他解决方法(通过其他方法ArrayList从数组创建新方法)而无需额外的库,但我个人还是建议您掌握Google收藏库(或发布时的Guava)。然后,您可以使用:


List<Integer> list = Lists.newArrayList(array);

我建议这样做的原因是,GCL通常是一件好事,值得使用。


如注释中所述,这将获取数组的副本。该列表不受原始数组的支持,并且任何一个集合中的更改都不会在另一个集合中看到。


查看完整回答
反对 回复 2019-11-18
?
函数式编程

TA贡献1807条经验 获得超9个赞

不是java.util.ArrayList。Arrays.asList()返回其自己的List实现(将更改“直写”到数组中。)。


这是一个固定大小的列表,因此不支持删除。


您可以从中创建实物ArrayList:


new java.util.ArrayList<>(Arrays.asList(someArray));  

asList()我必须承认,这是非常令人困惑的。


查看完整回答
反对 回复 2019-11-18
?
侃侃无极

TA贡献2051条经验 获得超10个赞

请阅读Arrays.asList()的API文档:


返回由指定数组支持的固定大小的列表。(更改为将返回列表“直写”到数组。)


请注意,在Javadocs中,Collections.remove(int)被标记为“可选操作”,这意味着并非所有Collections都将支持它。“固定大小的列表”意味着您无法更改列表的大小,而remove()会这样做。因此不支持。


如果要更改Arrays.asList()生成的列表,只需复制它,例如new ArrayList(Arrays.asList(...))。


查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 342 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信