java - 尝试从 Array.asList 返回的列表中删除时出现 UnsupportedOperationException

标签 java exception list

我正在使用 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/

相关文章:

java - 初始化一个 ArrayList

java - Java 中标点符号的模式匹配

java - 如何只在提交 BeanFieldGroup 时显示错误?

java - 这个 Java EnumSet 初始化构造如何工作?

exception - 在 MFC 应用程序中,将最顶层的 try/catch 放在哪里?

git - 如何解决这个问题,在执行 merge 命令期间捕获异常。 org.eclipse.jgit.errors.LockFailedException?

.net - 将数据类型 bigint 转换为 int [SQL Server] 时出错

java - 如何在抽象类型的 java 中初始化 List,以便以后可以将子类型添加到列表中

c# - 如何在不使用 Loop 的情况下更改 List<UIControl> 中控件的属性?

java - Java 中的 ArrayIndexOutofBounds/NullPointerException