※申し訳ありません。仕事都合で回答への返信が大分遅れそうです。。。
以下のコードをコンパイルすると、A,B,D,Eの4つが表示されました。これについて私は、カーソルの関係(要素が繰り上がる)でA,B,Eの3つが表示されるか、スコープの関係(while文で使われているstrとfor文で使われているstrは別スコープ)でA~E全てが表示されるのではないかと考えていたのですが、なぜCだけ削除されたのでしょうか?
Iteratorクラスのremoveメソッドの動きが特殊なのかと調べたのですが、それらしい記述は見つけられませんでした。
ちなみにこのコードは、著書『Java SE7 Silver問題集』の第4章:問18の解説を参考にしたものです。
import java.util.ArrayList;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
Iterator<String> ite = list.iterator();
while(ite.hasNext()) {
String str = ite.next();
if("C".equals(str)) {
ite.remove();
}
}
for(String str : list) {
System.out.println(str);
}
}
}
回答4件
あなたの回答
tips
プレビュー