コレクションから特定の要素を削除したい場合がよくあります。こう書く人もいるかもしれない。
次のようにコードをコピーします。
public voidoperate(List list){
for (イテレータ it = list.iterator(); it.hasNext();) {
文字列 str = (文字列)it.next();
if (str.equals("チェンガン")){
list.remove(str);
}
}
}
この書き込みメソッドが実行されるとすぐに、次の例外が報告されます。
スレッド「メイン」での例外 java.util.ConcurrentModificationException
java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449) で
ループ内ではリストの要素を削除できないためです。後で、これを実行しましたが、これは非常に愚かな方法です。そのアイデアは次のとおりです。ループの後に、List.removeAll メソッドを使用して、削除する要素を格納します。コードは次のとおりです。
次のようにコードをコピーします。
public voidoperate(List list){
リストの削除リスト = 新しい ArrayList();
for (イテレータ it = list.iterator(); it.hasNext();) {
文字列 str = (文字列)it.next();
if (str.equals("チェンガン")){
削除リスト.add(str);
}
}
list.removeAll(removeList);
}
確かにこれで問題は解決できますが、この方法は煩雑すぎます。実際には、次のように Iterator.remove メソッドを使用する、より簡単で効率的な方法があります。
次のようにコードをコピーします。
for (イテレータ it = list.iterator(); it.hasNext();) {
文字列 str = (文字列)it.next();
if (str.equals("チェンガン")){
it.remove();
}
}
したがって、Java の基本を知れば知るほど、コードはよりシンプルになります。逆に、コードが特に複雑な場合は、メソッドまたは設計に何か問題があるはずです。