現在、 をループするには 2 つのアプローチがあることを知っていますList
。しかし、もう少し複雑にしましょう。次のことを考慮してください。
- を繰り返し
List<E> list
ます。 int y
反復ごとに追跡したいとします。process(E elem, int y)
アイテムを処理する機能があります。
オプション1:
for (int i = 0, y = 0; i < list.size(); i++, y++) {
process(list.get(i), y);
}
実際には
for (int i = 0; i < list.size(); i++) {
process(list.get(i), i);
}
オプション 2:
int y = 0;
for (E elem : list) {
process(elem, y);
y++;
}
に書き換えることができます
int y = 0;
for (E elem : list) {
process(elem, y++);
}
しかし、なぜ次のものが存在しないのですか?それが存在しないことに対する異議は何ですか?
オプション 3:
for (int y = 0; E elem : list; y++) {
process(elem, y);
}
このコンストラクトを持つ 2 つの引数:
- どちらの
foreach
構文も区別可能 - 多くのオブジェクトは を実装
Iterable<E>
していますが、対応するものはありませんfor
。これはIterable<E>
、たとえば、 に注文が関連付けられていない場合に発生します。