特定のイテラブル (このIterableString クラスなど) では、新しいイテレータが作成されるか、イテレータが新しい foreach コンストラクトごとに何らかの方法で最初にリセットされることに気付いたと思いますが、これは他のイテラブルでは発生しないようです...
たとえば、次のコードを実行するとします。
import java.util.ArrayList;
public class test {
public static void main(String args[]) {
IterableString x = new IterableString("ONCE");
System.out.println("***");
for (char ch : x){
System.out.println(ch);
}
System.out.println("***");
for (char ch : x){
System.out.println(ch);
}
ArrayList y = new ArrayList();
y.add('T');
y.add('W');
y.add('I');
y.add('C');
y.add('E');
System.out.println("***");
for (char ch : y){
System.out.println(ch);
}
System.out.println("***");
for (char ch : y){
System.out.println(ch);
}
System.out.println();
}
}
次の出力が表示されます。
***
O
N
C
E
***
***
T
W
I
C
E
***
T
W
I
C
E
x を使用した 2 番目の foreach ループは、中断した場所 (最後の項目の後) から開始するように見えますが、y を使用した 2 番目の foreach ループは、最初に開始した場所 (最初の項目) から開始するようです。これはなぜですか? また、後者のように動作する Iterables (ArrayLists) を作成するにはどうすればよいでしょうか?
より具体的には、IterableString のようなクラスを ArrayList のように機能させるには、どのように正確に変更すればよいでしょうか?