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