次のコードのように反復中にそのコレクションを削除しようとすると、ConcurrentModificationExceptionが発生してしまいます。 Set<Integer> set = new HashSet<Integer>(); for (int i = 0 ; i < 10 ; i++) { set.add(i); } // このループで例外発生 for (Integer currValue : set) { if (currValue % 2 == 0) { set.remove(currValue); } } for (Integer currValue : set) { System.out.println(currValue + " "); } これを回避するために、反復中に削除せず、削除対象をまず保持しておき、その後でまとめて削除するという方法です。 Set<Integer> set = new HashSet<Integer>(); Set<Integer> removeReserve = new HashSet<Integer>(); for (int i = 0 ; i < 10 ; i++) { set.add(i); } for (Integer currValue : set) { if (currValue % 2 == 0) { removeReserve.add(currValue); } } for (Integer currValue : removeReserve) { set.remove(currValue); } for (Integer currValue : set) { System.out.println(currValue + " "); } しかしこの方法だと、ループがもう一度増えてしまい、なんだか気持ちよくありません。 そこで、もしももっとよい解決策の考え方があれば、教えて頂きたいのです。 「この方法以外ないと思う」という意見もほしいです。 その場合は、上記の解決策にしようと思います。
↧