Javaのイテレータと列挙インターフェイスの違い
コンテンツ
コレクションの要素に1つずつアクセスするために使用される3つのカーソルは次のとおりです。 列挙、イテレータおよびリストイテレータ。ただし、IteratorとEnumeratorは同じ作業を実行するためのものです。それでも、列挙型にはコレクション内の要素への読み取り専用アクセスがあるという意味で、これらは互いに区別されます。一方、Iteratorはコレクションから要素を読み取り、削除できます。 IteratorとEnumerationの重要な違いは、 列挙 コレクションクラスには適用できません。レガシクラスにのみ適用できます。一方、 イテレータ コレクションクラスに適用されるため、ユニバーサルカーソルと呼ばれます。以下に示す比較チャートを使用して、イテレータと列挙の違いをさらに学習しましょう。
- 比較表
- 定義
- 主な違い
- 結論
比較表
比較の根拠 | イテレータ | 列挙 |
---|---|---|
ベーシック | Iteratorは、すべてのコレクションクラスに適用できるユニバーサルカーソルです。 | 列挙はレガシークラスにのみ適用されるため、ユニバーサルカーソルではありません。 |
アクセス | Iteratorを使用すると、コレクション内の要素を読み取って削除できます。 | 列挙を使用すると、コレクション内の要素のみを読み取ることができます。 |
方法 | public boolean hasnext(); パブリックオブジェクトnext(); public void remove(); | public boolean hasMoreElements(); パブリックオブジェクトnextElement(); |
制限 | イテレータは、単方向の前方アクセスカーソルです。 イテレータはコレクション内の要素を置き換えることはできません。 イテレータは、コレクションに新しい要素を追加できません。 | 列挙は単方向の順方向アクセスカーソルです。 列挙はレガシークラスのみをサポートします。 列挙には、コレクション内の要素への読み取り専用アクセスのみがあります。 |
克服する | Iteratorの制限を克服するには、ListIteratorを選択する必要があります。 | 列挙の制限を克服するには、イテレータを選択する必要があります。 |
イテレータインターフェイスの定義
イテレータ コレクションフレームワークのインターフェイスです。 Iteratorはすべてのコレクションクラスに適用されるため、ユニバーサルカーソルと呼ばれます。これは、コレクション内の要素に1つずつアクセスするために使用されるカーソルです。 Iteratorを使用すると、コレクションから要素を取得できます。必要に応じて、コレクションから要素を削除することもできます。 Iteratorのオブジェクトは、次のように作成できます。
イテレータitr = Collc.iterator();
変数 itr Iteratorのオブジェクトです。 コルク Iteratorのオブジェクト(itr)を使用して循環または反復されるコレクションオブジェクトです。の iterator() 反復子オブジェクトの作成に使用されるメソッドです。以下に示すように、イテレータには3つのメソッドがあります。
public boolean hasnext(); public Object next(); public void remove();
最初の方法 hasnext() コレクションに要素があるかどうかを確認します。コレクションに要素がある場合はtrueを返し、そうでない場合はfalseを返します。 2番目の方法 次() コレクション内の次の要素を取得するために使用されます。 3番目の方法 remove() コレクションから要素を削除するために使用されます。
イテレータはコレクション内を順方向にのみ移動でき、移動中に戻ることはできません。イテレータはコレクションから要素を削除できますが、既存の要素を新しい要素に置き換える機能はなく、コレクションに新しい要素を追加することもできません。これらの制限を克服するには、ListIteratorインターフェースを使用します。
列挙インターフェースの定義
列挙 に適用可能なインターフェースです レガシー クラス。コレクションクラスには適用できません。したがって、これは汎用カーソルではありません。列挙は、コレクションから要素(オブジェクト)を1つずつ取得します。列挙オブジェクトには、コレクションの要素への読み取り専用アクセスがあります。列挙オブジェクトはコレクションの要素を変更できません。列挙オブジェクトの作成方法を見てみましょう。
列挙er = Vect.elements();
変数 えー 列挙のオブジェクトです。の ベクト Enumerationのオブジェクト(er)が通過する必要があるベクタークラスのオブジェクトです。方法 素子() 列挙のオブジェクトを作成するために使用されます。以下に示すように、Enumerationインターフェースには2つのメソッドしかありません。
public boolean hasMoreElements(); public nextElement();
最初の方法 hasMoreElements() は、コレクションに要素があるか、空であるかを確認するために使用されます。コレクションに要素がある場合、hasMoreElements()メソッドはtrueを返し、そうでない場合はfalseを返します。 2番目の方法 nextElement() コレクションから要素を1つずつ取得するために使用されます。トラバースが完了すると、nextElement()メソッドがスローします NoSuchElementException。 Enumerationオブジェクトは、順方向にのみ移動します。コレクション内の要素を追加、削除、または置換することはできません。列挙のこれらの制限を克服するには、イテレータを選択する必要があります。
- IteratorとEnumerationの主な違いは、Iteratorはユニバーサルカーソルであり、任意のコレクションオブジェクトの反復に使用できることです。一方、列挙はレガシークラスのオブジェクトのトラバースのみに使用されます。
- 列挙オブジェクトには、コレクション内の要素への読み取り専用アクセスのみがあります。ただし、Iteratorのオブジェクトは、コレクションから要素を読み取って削除できます。
- イテレータには、コレクションのステータスを確認する方法とコレクションから要素を取得する方法の2つの方法があります。列挙メソッドに加えて、Iteratorにはコレクションから要素を削除するもう1つのメソッドがあります。
- 列挙の制限は、順方向単方向カーソルであり、読み取り専用アクセスがあり、コレクションクラスに適用できることです。反対に、イテレータはコレクション内の新しい要素を置換または追加することはできません。また、列挙のようにその一方向カーソルも置換または追加できません。
- 列挙の制限はIteratorによって解決され、Iteratorの制限はListIteratorによって解決されます。
結論:
現在、IteratorおよびListItertaorカーソルはユニバーサルカーソルであり、列挙よりもはるかに効率的であるため使用されます。