gpt4 book ai didi

java - 列出 retainAll 异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:05:54 25 4
gpt4 key购买 nike

我想测试如何获得两个列表之间的交集,这是我的代码:

            List<Integer> list = Arrays.asList(16, 17, 18, 19, 20);
List<Integer> list2 = list.subList(2, 5);

System.out.println(list.subList(2, 5));
System.out.println(list.containsAll(list.subList(2, 5)));
System.out.println(list.retainAll(list2));

这会产生:

Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(Unknown Source)
at java.util.AbstractList$Itr.remove(Unknown Source)
at java.util.AbstractCollection.retainAll(Unknown Source)
at gov.noaa.nhc.App.main(App.java:48)

但我没有做任何删除。为什么会产生异常?

更新一:

使用:

List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = list.subList(2, 5);

产生:

java.util.ConcurrentModificationException

由于 list2 由 list1 支持,从 list1 中删除项目将导致此异常。最终工作版本:

List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = Arrays.asList(18, 19, 20);

List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = new ArrayList<Integer>(Arrays.asList(18, 19, 20));

 List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = new ArrayList<Integer>(list.subList(2, 5));

谢谢大家的回答。

最佳答案

当您使用 Arrays.asList 时,您会得到一个列表,该列表由传入的具有受限功能的实际数组支持。如果您想要一个完全可修改的列表,则必须创建一个新列表。例如:

List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = new ArrayList<Integer>(list.subList(2, 5));
list.retainAll(list2);
System.out.println(list);
// result: [18, 19, 20]

关于java - 列出 retainAll 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10541651/

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