回答編集履歴

2

抜けがあったので修正

2017/03/31 07:47

投稿

masaya_ohashi
masaya_ohashi

スコア9206

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ```Java
8
8
 
9
- Iterator<String> itr = list;
9
+ Iterator<String> itr = list.iterator();
10
10
 
11
11
  while(itr.hasNext()){
12
12
 

1

追記と修正

2017/03/31 07:47

投稿

masaya_ohashi
masaya_ohashi

スコア9206

test CHANGED
@@ -1,4 +1,4 @@
1
- ConcurrentModificationExceptionが発生するかしないかは「時の運」がからんでいます。監視のタイミングの気まぐれによって起こるといっても過言ではありません。ちなみに、ソース1もソース2も、どちらも「スレッドセーフでないListの、イテレータ操作中のremove」という点においてConcurrentModificationExceptionが発生する可能性はらんでいます。
1
+ ConcurrentModificationExceptionが発生するかしないかは「時の運」がからんでいます。監視のタイミングの気まぐれによって起こるといっても過言ではありません。ちなみに、ソース1もソース2も、どちらも「スレッドセーフでないListの、イテレータ操作中のremove」という点においてConcurrentModificationExceptionが発生する可能性はらんでいます。
2
2
 
3
3
 
4
4
 
@@ -23,3 +23,11 @@
23
23
  ```
24
24
 
25
25
  拡張for文において、「ConcurrentModificationExceptionの起こらない安全なremove方法」は存在しません。イテレータを自分で用意して、イテレータのremoveを使いましょう。
26
+
27
+
28
+
29
+ #追記
30
+
31
+ 存在しないとは言いましたが、Collections.synchronizedListを使えば拡張for内で安全にremove可能な同期Listに置き換えることができます。ただし、あまり理解せずにこれに頼るのはよくないです。速度も遅くなりますし、デッドロックの発生の危険性もあります。
32
+
33
+ [http://qiita.com/mountcedar/items/3a4d147d12e8b38cf6d0](http://qiita.com/mountcedar/items/3a4d147d12e8b38cf6d0)