gpt4 book ai didi

java - ArrayList retainAll 让我困惑

转载 作者:行者123 更新时间:2023-11-29 06:27:37 30 4
gpt4 key购买 nike

我正在尝试使用 java 中的交集。如果我有以下内容,我只想要一个没有任何内容的数组列表,因为交集给我零。

List<String> coll1 = Arrays.asList(["A"]);
List<String> coll2 = Arrays.asList(["B","C"]);

coll1.retainAll(coll2);

但是 retainAll 会抛出这个异常:

java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.AbstractCollection.retainAll(AbstractCollection.java:410)

如果我将列表转换为集合,那么调用 retainAll 时我会得到一个空集合:

Set<String> set1 = new HashSet<String>(coll1);
Set<String> set2 = new HashSet<String>(coll2);

set1.retainAll(set2); //gives me an empty set, which is good!

为什么 ArrayList 有空交点的问题?

最佳答案

这是因为 Arrays.asList 创建了一个不可变列表,所以当您调用 retainAll 时它会尝试从列表中删除条目,它会报错。

解决方案是为其创建一个新的 ArrayList 副本。

public void test(String[] args) {
List<String> coll1 = new ArrayList<>(Arrays.asList("A"));
List<String> coll2 = new ArrayList<>(Arrays.asList("B","C"));
coll1.retainAll(coll2);
System.out.println(coll1);
}

打印:

[]

关于java - ArrayList retainAll 让我困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49813782/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com