web-dev-qa-db-ja.com

イテレータとリストイテレータの違いは?

Iterator ite = Set.iterator();
Iterator ite = List.iterator();

ListIterator listite = List.listIterator();

Iteratorを使用して、SetList、またはMapを走査できます。ただし、ListIteratorListをトラバースするためにのみ使用でき、Setをトラバースすることはできません。どうして?

主な違いは、イテレータでは一方向にしか移動できないが、ListIteratorでは両方向に移動できることです。他に違いはありますか? ListIteratorに対するIteratorの利点は何ですか?

129
Siva

ListIterator の違いはJavadocにリストされています

あなたはできる

  • 後方に反復する
  • 任意の時点で反復子を取得します。
  • 任意の時点で新しい値を追加します。
  • その時点で新しい値を設定します。
143
Peter Lawrey

2つの違いがあります。

  1. Iteratorを使用して、SetおよびListをトラバースし、オブジェクトのタイプをマップすることもできます。 ListIteratorを使用して、リストタイプのオブジェクトを走査できますが、セットタイプのオブジェクトは走査できません。

    つまり、SetおよびListを使用してIteratorオブジェクトを取得できます。以下を参照してください。

    Iteratorを使用することで、コレクションオブジェクトから順方向のみの要素を取得できます。

    イテレータのメソッド:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator();
    Iterator iterator = List.iterator();
  2. しかし、ListインターフェイスからのみListIteratorオブジェクトを取得します。こちらをご覧ください。

    ここで、ListIteratorを使用すると、どちらの方向にも(前後両方に)移動できます。そのため、Iteratorのメソッド以外に、hasPrevious()previous()などのメソッドがさらに2つあります。また、次の要素または前の要素のインデックスを取得できます(それぞれnextIndex()およびpreviousIndex()を使用)

    ListIteratorのメソッド:

    1. hasNext()
    2. 次()
    3. 前()
    4. hasPrevious()
    5. remove()
    6. nextIndex()
    7. previousIndex()
    ListIterator listiterator = List.listIterator();

    つまり、SetインターフェイスからListIteratorオブジェクトを取得できません。

リファレンス:- IteratorとListIteratorの違いは何ですか?

38
jaideep

IteratorはListIteratorのスーパークラスです。

それらの違いは次のとおりです。

  1. iteratorを使用すると、前方にしか移動できませんが、ListIteratorを使用すると、要素の読み取り中にバックワードを移動できます。
  2. ListIteratorを使用すると、走査中の任意の時点でインデックスを取得できますが、これはiteratorsでは不可能です。
  3. iteratorを使用すると、使用可能な次の要素のみをチェックできますが、listiteratorでは前の要素と次の要素をチェックできます。
  4. listiteratorを使用すると、トラバース中にいつでも新しい要素を追加できます。 iteratorでは不可能です。
  5. 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
}
24
user1923551

ListIteratorに対するIteratorの利点は、走査中の任意の時点で要素を追加 ListIteratorを使用してリストを作成できることです。

2
Alice