不受支持的操作尝试从 Array.asList 返回的列表中删除时的异常

2022-08-31 22:20:25

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


答案 1

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

文档没有像他们可能的那样清楚地说明这一点,但他们确实说:

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

“固定大小”位应提示您无法添加或删除元素:)

虽然还有其他方法可以解决这个问题(从数组创建新库的其他方法),但没有额外的库,但我个人建议在发布时获得Google Collections Library(或Guava)。然后,您可以使用:ArrayList

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

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

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


答案 2

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

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

你可以从中创建一个真正的:ArrayList

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

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