Iterator ite = Set.iterator();
Iterator ite = List.iterator();
ListIterator listite = List.listIterator();
Iterator
を使用して、Set
、List
、またはMap
を走査できます。ただし、ListIterator
はList
をトラバースするためにのみ使用でき、Set
をトラバースすることはできません。どうして?
主な違いは、イテレータでは一方向にしか移動できないが、ListIterator
では両方向に移動できることです。他に違いはありますか? ListIterator
に対するIterator
の利点は何ですか?
2つの違いがあります。
Iteratorを使用して、SetおよびListをトラバースし、オブジェクトのタイプをマップすることもできます。 ListIteratorを使用して、リストタイプのオブジェクトを走査できますが、セットタイプのオブジェクトは走査できません。
つまり、SetおよびListを使用してIteratorオブジェクトを取得できます。以下を参照してください。
Iteratorを使用することで、コレクションオブジェクトから順方向のみの要素を取得できます。
イテレータのメソッド:
hasNext()
next()
remove()
Iterator iterator = Set.iterator();
Iterator iterator = List.iterator();
しかし、ListインターフェイスからのみListIteratorオブジェクトを取得します。こちらをご覧ください。
ここで、ListIteratorを使用すると、どちらの方向にも(前後両方に)移動できます。そのため、Iteratorのメソッド以外に、hasPrevious()
やprevious()
などのメソッドがさらに2つあります。また、次の要素または前の要素のインデックスを取得できます(それぞれnextIndex()
およびpreviousIndex()
を使用)
ListIteratorのメソッド:
ListIterator listiterator = List.listIterator();
つまり、SetインターフェイスからListIteratorオブジェクトを取得できません。
リファレンス:- IteratorとListIteratorの違いは何ですか?
IteratorはListIteratorのスーパークラスです。
それらの違いは次のとおりです。
iterator
を使用すると、前方にしか移動できませんが、ListIterator
を使用すると、要素の読み取り中にバックワードを移動できます。ListIterator
を使用すると、走査中の任意の時点でインデックスを取得できますが、これはiterator
sでは不可能です。iterator
を使用すると、使用可能な次の要素のみをチェックできますが、listiterator
では前の要素と次の要素をチェックできます。listiterator
を使用すると、トラバース中にいつでも新しい要素を追加できます。 iterator
では不可能です。listiterator
を使用すると、走査中に要素を変更できますが、これはiterator
では不可能です。イテレータのルックアンドフィール:
public interface Iterator<E> {
boolean hasNext();
E next();
void remove(); //optional-->use only once with next(),
dont use it when u use for:each
}
ListIteratorのルックアンドフィール:
public interface ListIterator<E> extends Iterator<E> {
boolean hasNext();
E next();
boolean hasPrevious();
E previous();
int nextIndex();
int previousIndex();
void remove(); //optional
void set(E e); //optional
void add(E e); //optional
}
ListIterator
に対するIterator
の利点は、走査中の任意の時点で要素を追加 ListIteratorを使用してリストを作成できることです。