質問: ite.next(); if("C".equals(str)) { ite.remove(); } } for(String str : list) { System.out.println(str); } } }
回答: 下記のどちらかで考えていたが、実際は違った。なぜか...ということですね。 > > カーソルの関係(要素が繰り上がる)でA,B,Eの3つが表示される > > > > > スコープの関係(while文で使われているstrとfor文で使われているstrは別スコープ)でA~E全てが表示されるのではないか > > > どちらの考え方も、プリミティブ型(int,double,booleanなど)と参照型(プリミティブ型以外のすべて)の違いを明確に理解されてないように思います。 Listは参照型ですので、Iteratorに値をコピーしているわけではなく、今Listの何番目を参照しているかという情報を渡しています。 また、IteratorはListを一通り舐めるための栞(しおり)のような役目を果たしています。 今回の場合でいうと、栞が指し示す場所が"C"という文字列であったら、Listの要素を削除するという処理をしています。 たしかに、栞のスコープはListとは違いますが、栞が消えても、Listは残っているので、今回のような結果となります。 答えになっていますでしょうか?