当前位置: 首页 > 面试题库 >

Arrays.asList()创建的列表上的remove()抛出UnsupportedOperationException

仉臻
2023-03-14
问题内容

我有一个集合c1<MyClass>和一个数组a<MyClass>。我试图将数组转换为集合c2并执行操作c1.removeAll(c2),但这会抛出异常UnsupportedOperationException。我发现,asList()Arrays类收益Arrays.ArrayList类和这个类继承removeAll()AbstractList()其实现抛出UnsupportedOperationException

    Myclass la[] = getMyClass();
    Collection c = Arrays.asList(la);
    c.removeAll(thisAllreadyExistingMyClass);

有什么办法可以删除元素?请帮忙


问题答案:

Arrays.asList返回List数组的包装器。此包装具有固定的大小,并直接由数组支持,因此对的调用set将修改数组,而修改列表的任何其他方法都将引发UnsupportedOperationException

要解决此问题,你必须通过复制包装器列表的内容来创建新的可修改列表。通过使用ArrayList带有的构造函数,这很容易做到Collection:

Collection c = new ArrayList(Arrays.asList(la));


 类似资料:
  • 问题内容: 当我们使用数组从数组创建列表时,该列表是不可变的。我只是想知道为什么当(或)的基本目的是具有动态大小并能够随意添加和删除元素时,为什么要创建一个不可变列表。当我们需要固定大小的数据结构时,我们选择数组;当我们需要动态数据结构时,我们选择或或等等。那么拥有不可变列表的目的是什么?我在做作业时遇到了这个问题。 问题答案: 当我们使用java.util.Arrays.asList()从数组创

  • 问题内容: 该方法返回的表示形式。这里返回的对象是数组支持的,但不是对象。 我正在寻找对象返回值与对象之间的差异- 一种快速的来源,可以告诉它们而无需深入研究代码。 TIA。 问题答案: 当您调用Arrays.asList时,它不会返回。它返回一个由原始源数组支持的固定大小列表。换句话说,它是使用Java的基于集合的API公开的数组的视图。 您不能向其中添加元素,也不能从中删除元素。如果您尝试从中

  • 我使用的是Java,我有一个节点列表,我需要在堆栈上按照从最后一个到第一个的顺序使用List。 例: 我的列表是{node1, node2, node3} 我的堆栈应该是 { 节点1, 节点2, 节点 3 } 我如何轻松解决这个问题? 这行得通吗?

  • 问题内容: 我有非常简单的代码: 我通过list.add(0,d)得到ConcurrentModificationException异常。所以总的来说,这是因为sublist()造成的。我很困惑,因为在sublist()的情况下,文档中说: 返回列表由该列表支持,因此返回列表中的非结构性更改会反映在此列表中, 反之亦然 。 您能解释一下渔获量在哪里吗? 问题答案: 这是原始列表的简单视图(请参阅此

  • 问题内容: 在通过返回不能通过使用方法如被修改或。但是,如果将其传递给该方法,它将可以对数组进行排序而不会出现任何问题(我希望有一个例外)。这似乎是非常不一致的行为。那么,方法返回的对允许的操作是什么? 我在文档中找不到任何线索。 编辑: 是的,我可以理解为什么它不支持或。但是,它如何支持排序呢? 问题答案: 返回由数组支持的固定大小。因此,不支持。支持。您可以像对待数组一样看它。数组的长度固定。

  • 我需要我的MediaPlayer对象作为类变量可见,而不是本地创建。 但是当我试图这样开始的时候- 这也以同样的错误失败- Logcat说- 进程:com。附录24.gg。relaaax,PID:24202 java。lang.RuntimeException:无法实例化活动