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

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



FFIVE
浏览 344回答 3
3回答

素胚勾勒不出你

Array.asList() 在列表接口中包装一个数组。该列表仍受阵列支持。数组是固定大小的-它们不支持添加或删除元素,因此包装器也不能。文档并未尽其所能,但他们确实说:返回由指定数组支持的固定大小的列表。“固定大小”位应暗示您不能添加或删除元素:)尽管还有其他解决方法(通过其他方法ArrayList从数组创建新方法)而无需额外的库,但我个人还是建议您掌握Google收藏库(或发布时的Guava)。然后,您可以使用:List<Integer> list = Lists.newArrayList(array);我建议这样做的原因是,GCL通常是一件好事,值得使用。如注释中所述,这将获取数组的副本。该列表不受原始数组的支持,并且任何一个集合中的更改都不会在另一个集合中看到。

函数式编程

不是java.util.ArrayList。Arrays.asList()返回其自己的List实现(将更改“直写”到数组中。)。这是一个固定大小的列表,因此不支持删除。您可以从中创建实物ArrayList:new java.util.ArrayList<>(Arrays.asList(someArray));&nbsp;&nbsp;asList()我必须承认,这是非常令人困惑的。

侃侃无极

请阅读Arrays.asList()的API文档:返回由指定数组支持的固定大小的列表。(更改为将返回列表“直写”到数组。)请注意,在Javadocs中,Collections.remove(int)被标记为“可选操作”,这意味着并非所有Collections都将支持它。“固定大小的列表”意味着您无法更改列表的大小,而remove()会这样做。因此不支持。如果要更改Arrays.asList()生成的列表,只需复制它,例如new ArrayList(Arrays.asList(...))。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java