質問編集履歴
5
a
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
JavaのArrayLIstのスレッドセーフについて質問です。
|
2
|
+
---
|
2
3
|
Java SIlver 黒本より
|
4
|
+
|
3
|
-
|
5
|
+
ソース1
|
6
|
+
---
|
4
7
|
```Java
|
5
8
|
Arraylist<String> list = new ArrayList<>();
|
6
9
|
|
@@ -18,7 +21,8 @@
|
|
18
21
|
|
19
22
|
}
|
20
23
|
```
|
21
|
-
|
24
|
+
ソース2
|
25
|
+
---
|
22
26
|
```Java
|
23
27
|
Arraylist<String> list = new ArrayList<>();
|
24
28
|
|
@@ -41,25 +45,27 @@
|
|
41
45
|
}
|
42
46
|
```
|
43
47
|
*クラスの宣言とmainメソッドは省略しました。
|
48
|
+
|
44
|
-
|
49
|
+
---
|
45
50
|
このソース1の実行した結果として
|
46
51
|
A
|
47
52
|
が出力。
|
53
|
+
|
48
|
-
|
54
|
+
---
|
55
|
+
|
49
56
|
ソース2は実行時に例外がスローされるとあります。
|
50
57
|
ConcurrentModificationException←これ
|
51
58
|
|
59
|
+
|
60
|
+
|
52
61
|
その理由として、ループで読みだしている最中にremoveメソッドを呼び出しているからとあります。
|
53
|
-
しかし、ソース1でもremoveメソッドを呼び出しているのにソース1では例外がスローされません。これはなぜでしょうか?
|
62
|
+
しかし、ソース1でもremoveメソッドを呼び出しているのにソース1では例外がスローされません。**__これはなぜでしょうか?__**
|
54
63
|
|
55
64
|
私なりの考察。
|
65
|
+
---
|
56
66
|
ソース1では拡張for文2回目のループでremoveメソッドが処理され3買い目のループは要素がなくなり2回目で終わり、残りの要素に影響されない。
|
57
67
|
|
58
68
|
ソース2では拡張for文3回目のループでremoveメソッドが処理され4回目ループの際の"E"がまだ残っているため要素数の順番に影響があるから?
|
59
69
|
|
70
|
+
---
|
60
|
-
よろしくお願いします。
|
71
|
+
よろしくお願いします。
|
61
|
-
```html
|
62
|
-
<div id="test">
|
63
|
-
<p>これはテストです。</p>
|
64
|
-
</div>
|
65
|
-
```
|
4
あ
title
CHANGED
File without changes
|
body
CHANGED
@@ -18,8 +18,8 @@
|
|
18
18
|
|
19
19
|
}
|
20
20
|
```
|
21
|
-
|
22
21
|
///////////////////ソース2 ////////////////
|
22
|
+
```Java
|
23
23
|
Arraylist<String> list = new ArrayList<>();
|
24
24
|
|
25
25
|
list.add("A");
|
@@ -39,7 +39,7 @@
|
|
39
39
|
for (String str : list){
|
40
40
|
System.out.println(str);
|
41
41
|
}
|
42
|
-
|
42
|
+
```
|
43
43
|
*クラスの宣言とmainメソッドは省略しました。
|
44
44
|
/////////////////////
|
45
45
|
このソース1の実行した結果として
|
3
あ
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
JavaのArrayLIstのスレッドセーフについて質問です。
|
2
2
|
Java SIlver 黒本より
|
3
3
|
////////////////ソース1 /////////////
|
4
|
+
```Java
|
4
5
|
Arraylist<String> list = new ArrayList<>();
|
5
6
|
|
6
7
|
list.add("A");
|
@@ -16,8 +17,8 @@
|
|
16
17
|
}
|
17
18
|
|
18
19
|
}
|
20
|
+
```
|
19
21
|
|
20
|
-
|
21
22
|
///////////////////ソース2 ////////////////
|
22
23
|
Arraylist<String> list = new ArrayList<>();
|
23
24
|
|
2
あ
title
CHANGED
File without changes
|
body
CHANGED
@@ -56,4 +56,9 @@
|
|
56
56
|
|
57
57
|
ソース2では拡張for文3回目のループでremoveメソッドが処理され4回目ループの際の"E"がまだ残っているため要素数の順番に影響があるから?
|
58
58
|
|
59
|
-
よろしくお願いします。
|
59
|
+
よろしくお願いします。
|
60
|
+
```html
|
61
|
+
<div id="test">
|
62
|
+
<p>これはテストです。</p>
|
63
|
+
</div>
|
64
|
+
```
|
1
remove
title
CHANGED
File without changes
|
body
CHANGED
@@ -49,7 +49,7 @@
|
|
49
49
|
ConcurrentModificationException←これ
|
50
50
|
|
51
51
|
その理由として、ループで読みだしている最中にremoveメソッドを呼び出しているからとあります。
|
52
|
-
しかし、ソース1でも呼び出しているのにソース1では例外がスローされません。これはなぜでしょうか?
|
52
|
+
しかし、ソース1でもremoveメソッドを呼び出しているのにソース1では例外がスローされません。これはなぜでしょうか?
|
53
53
|
|
54
54
|
私なりの考察。
|
55
55
|
ソース1では拡張for文2回目のループでremoveメソッドが処理され3買い目のループは要素がなくなり2回目で終わり、残りの要素に影響されない。
|