我正在使用 List
来保存通过调用 Array.asList()
方法获得的一些数据。然后我尝试使用 myList.Remove(int i)
方法删除一个元素。但是当我尝试这样做时,我得到了一个 UnsupportedOperationException
。这会是什么原因?我应该如何解决这个问题?
最佳答案
Array.asList()
包装列表接口(interface)中的一个数组。该列表仍然由数组支持。数组是固定大小的 - 它们不支持添加或删除元素,因此包装器也不支持。
文档并没有尽可能清楚地说明这一点,但他们确实说:
Returns a fixed-size list backed by the specified array.
“固定大小”位应该是您无法添加或删除元素的提示:)
虽然有其他方法可以解决这个问题(从数组创建新 ArrayList
的其他方法)而无需额外的库,但我个人建议使用 Google Collections Library (或 Guava ,当它发布时)。然后你可以使用:
List<Integer> list = Lists.newArrayList(array);
我建议这样做的原因是,GCL 总体上是个好东西,非常值得使用。
如注释中所述,这需要数组的副本;该列表不受原始数组的支持,并且任何一个集合中的更改都不会在另一个集合中看到。
关于java - 尝试从 Array.asList 返回的列表中删除时出现 UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1624144/