2つのリスト間の共通部分を取得する方法をテストしたかったのですが、これが私のコードです:
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)
しかし、私は削除を行っていません。なぜこれが例外を生み出すのですか?
更新I:
使用:
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));
みなさん、ありがとうございました。