次の理由により、次のことができないことは誰もが知っていますConcurrentModificationException
。
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
しかし、これは明らかに時々機能しますが、常に機能するとは限りません。ここにいくつかの特定のコードがあります:
public static void main(String[] args) {
Collection<Integer> l = new ArrayList<>();
for (int i = 0; i < 10; ++i) {
l.add(4);
l.add(5);
l.add(6);
}
for (int i : l) {
if (i == 5) {
l.remove(i);
}
}
System.out.println(l);
}
もちろん、これにより次の結果が得られます。
Exception in thread "main" java.util.ConcurrentModificationException
複数のスレッドがそれを行っていないにもかかわらず。ともかく。
この問題の最善の解決策は何ですか? この例外をスローせずにループ内のコレクションからアイテムを削除するにはどうすればよいですか?
また、ここでは任意のものを使用していますが、Collection
必ずしも ではないため、ArrayList
に依存することはできませんget
。