Java SE8 Silverを学習しています。
教材はインプレスの「徹底攻略」です。
問題で気になるものがあり、Eclipse4.6.3を使って動作をさせました。
Java
1import java.util.ArrayList; 2 3public class Practice { 4 5 public static void main(String[] args) { 6 ArrayList<String> list = new ArrayList<>(); 7 list.add("A"); 8 list.add("B"); 9 list.add("C"); 10 11 for(String str : list){ 12 if("B".equals(str)){ 13 list.remove(str); 14 }else{ 15 System.out.println(str); 16 } 17 } 18 } 19 20}
こちらのコードですが、list.remove(str)により要素が一つ分繰り上がることで「A」のみが表示される、が答えとなります。実際実行しても同じ結果になりました。
ここで疑問なのですが、拡張for文でひとつずつ要素を取り出し、removeを使って削除した場合、スレッドセーフでないArrayListでは例外がスローされるはずです。なぜ、このコードでは例外がスローされないのでしょうか。
条件式を("A".equals(str))や("C".equals(str))にした場合は、例外がスローされます。Bのときだけ例外にならず要素の削除が行われています。
本問題に関わりのある問題も含め、解説を何度も読み返しましたが解決しませんでした。
どうかご指導のほどよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/08 03:44
2018/02/08 04:29
2018/02/08 04:50
2018/02/08 12:57
2018/02/08 13:26
退会済みユーザー
2018/02/08 16:15
2018/02/08 16:21
退会済みユーザー
2018/02/08 16:25
2018/02/08 16:29
退会済みユーザー
2018/02/08 16:38
2018/02/08 16:42
2018/02/08 17:15
退会済みユーザー
2018/02/08 23:00