Quantcast
Channel: OKWAVE 閲覧数の多い質問(Java/253)【本日】
Viewing all articles
Browse latest Browse all 68675

反復的削除時に発生するConcurrentModificationExceptionのスマートな回避

$
0
0
次のコードのように反復中にそのコレクションを削除しようとすると、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 + " "); } しかしこの方法だと、ループがもう一度増えてしまい、なんだか気持ちよくありません。 そこで、もしももっとよい解決策の考え方があれば、教えて頂きたいのです。 「この方法以外ないと思う」という意見もほしいです。 その場合は、上記の解決策にしようと思います。

Viewing all articles
Browse latest Browse all 68675

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>