List と Set を使用するとき、それらのデータを走査するために、多くの場合 Iterator を使用します。
ドロップ ジェネレーターを使用すると、トラバーサル プロセスに干渉する必要がなく、必要なデータを一度に 1 つずつ取り出して処理するだけです。しかし、使用する場合には違いがあります。
List と Set の両方には、イテレータを取得するための iterator() があります。 List の場合、listIterator() を通じてそのイテレータを取得することもできます。この 2 つのイテレータは、次の点で異なります。
1. ListIterator には、Add オブジェクトを使用できる add() メソッドがあります。
2. ListIterator と Iterator の両方には、逐次後方走査を実現できる hasNext() メソッドと next() メソッドがありますが、ListIterator には、逆方向 (逐次走査) を実現できる hasPrevious() メソッドとPrevious() メソッドがあります。 .前)トラバース。イテレータではできません。
3. ListIterator は現在のインデックス位置を見つけることができ、nextIndex() とpreviousIndex() でこれを実現できます。イテレータにはこの機能はありません。
4. どちらもオブジェクトを削除できますが、ListIterator はオブジェクトを変更でき、set() メソッドはそれを行うことができます。 Iierator は横断することのみが可能であり、変更することはできません。
ListIteratorのこれらの機能により、LinkedListなどのListデータ構造に対する操作を実装することができます。
実際、配列オブジェクトはイテレータを使用して実装することもできます。
org.apache.commons.collections.iterators.ArrayIterator でこの機能を実現できます。使用法については以前に説明しました。詳細については、次を参照してください。 一般に、レコードを繰り返し取得する必要がある場合は、ListIterator を使用して機能を拡張できます (JDBC のローリング結果セットと少し似ています)。