logo

Javaのイテレータ

Java では、 イテレーター Java カーソルの 1 つです。 Javaイテレータ Java オブジェクト コンポーネントのコレクション全体を 1 つずつ反復処理するために実践されるインターフェイスです。 Java 1.2 Collection フレームワーク以降、Java プログラミング言語では無料で使用できます。これは java.util パッケージに属します。

Java Iterator は Java 1.2 で導入されましたが、Collection オブジェクトの要素を横断するために使用できる最も古いツールではありません。 Java プログラミング言語で最も古い Iterator は、Enumerator より前の Iterator です。 Java Iterator インターフェイスは、ArrayList などのアクセス可能なコレクションを横断するために最初に実践されていた列挙型イテレータを継承します。

Java イテレータは、 ユニバーサルカーソル Java のコレクション フレームワークのすべてのクラスに適しているためです。 Java Iterator は、READ や REMOVE などの操作にも役立ちます。 Java Iterator インターフェイスと列挙型イテレータ インターフェイスを比較すると、Java Iterator で使用できるメソッドの名前の方が正確で使いやすいと言えます。

Java イテレータの利点

Java のイテレーターは、その数多くの利点により非常に普及しました。 Java Iterator の利点は次のとおりです。

  • ユーザーは、これらのイテレータを Collection フレームワークの任意のクラスに適用できます。
  • Java Iterator では、読み取り操作と削除操作の両方を使用できます。
  • ユーザーが for ループを使用している場合、コレクションを最新化 (追加/削除) することはできませんが、Java イテレーターを使用している場合は、コレクションを更新するだけで済みます。
  • Java イテレータは、コレクション API のユニバーサル カーソルとみなされます。
  • Java イテレータのメソッド名は非常に簡単で、使い方も非常に簡単です。

Java イテレータの欠点

Java Iterator には数多くの利点がありますが、さまざまな欠点もあります。 Java Iterator の欠点を以下に示します。

  • Java Iterator は、順方向の反復のみを保持します。簡単に言うと、Java イテレータは単方向イテレータです。
  • 新しいコンポーネントの置き換えと拡張は、Java Iterator によって承認されていません。
  • CRUD 操作では、Java イテレーターは CREATE や UPDATE などのさまざまな操作を保持しません。
  • Spliterator と比較すると、Java Iterator は並列パターンでの要素の走査をサポートしていません。これは、Java Iterator が Sequential 反復のみをサポートしていることを意味します。
  • Spliterator と比較すると、Java Iterator は大量のデータを走査するためのより信頼性の高い実行をサポートしていません。

Javaイテレータの使い方は?

ユーザーが Java Iterator を使用する必要がある場合、トラバースしたいオブジェクトのコレクションから Iterator インターフェイスのインスタンスを作成することが必須です。その後、受信したイテレーターは、ユーザーがオブジェクトのコレクションの各要素を確実に横断できるように、基礎となるコレクション内のコンポーネントの追跡を維持します。

ユーザーが、そのコレクションにつながるイテレーターをトラバースしているときに基になるコレクションを変更すると、通常、イテレーターはそれを確認し、次回ユーザーがイテレーターから次のコンポーネントを取得しようとしたときに例外をスローします。

Javaのバイナリツリー

Java イテレータ メソッド

次の図は、Java Iterator インターフェイスのクラス図を完全に示しています。これには、次の合計 4 つのメソッドが含まれています。

  • hasNext()
  • 次()
  • 取り除く()
  • forEachRemaining()

forEachRemaining() メソッドは Java 8 で追加されました。各メソッドについて詳しく説明します。

    ブール値 hasNext(): このメソッドはパラメータを受け入れません。反復内にさらに要素が残っている場合は true を返します。要素がもう残っていない場合は false を返します。
    反復内に要素がもう残っていない場合は、 next() メソッドを呼び出す必要はありません。簡単に言えば、このメソッドは next() メソッドを呼び出すかどうかを決定するために使用されると言えます。E next():これは hasNext() メソッドに似ています。また、パラメータは受け入れられません。 E、つまりトラバーサルの次の要素を返します。オブジェクトの反復またはコレクションに反復する要素がもう残っていない場合、NoSuchElementException がスローされます。デフォルトの void 削除():このメソッドにもパラメータは必要ありません。このメソッドには戻り値の型はありません。このメソッドの主な機能は、基礎となるコレクションを走査する反復子によって返された最後の要素を削除することです。次の () メソッド呼び出しごとに、remove () メソッドを要求するのはほとんどありません。イテレータが削除操作をサポートしていない場合、UnSupportedOperationException がスローされます。また、次のメソッドがまだ呼び出されていない場合は、IllegalStateException をスローします。デフォルトの void forEachRemaining(コンシューマ アクション):これは、パラメータを受け取る Java Iterator の唯一のメソッドです。アクションをパラメータとして受け取ります。行動とは、実行されるべきものにほかなりません。メソッドの戻り値の型はありません。このメソッドは、すべてのコンポーネントが消費されるか、アクションで例外がスローされるまで、コレクションの左側のすべてのコンポーネントに対して特定の操作を実行します。アクションによってスローされた例外は呼び出し元に渡されます。アクションが null の場合、NullPointerException がスローされます。

Java イテレータの例

ここで、Java プログラムを実行して、Java Iterator インターフェイスの利点を説明します。以下のコードは都市名の ArrayList を生成します。次に、ArrayList の iterator () メソッドを適用してイテレータを初期化します。その後、リストを走査して各要素を表します。

JavaIteratorExample.java

 import java.io.*; import java.util.*; public class JavaIteratorExample { public static void main(String[] args) { ArrayList cityNames = new ArrayList(); cityNames.add('Delhi'); cityNames.add('Mumbai'); cityNames.add('Kolkata'); cityNames.add('Chandigarh'); cityNames.add('Noida'); // Iterator to iterate the cityNames Iterator iterator = cityNames.iterator(); System.out.println('CityNames elements : '); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); } } 

出力:

 CityNames elements: Delhi Mumbai Kolkata Chandigarh Noida 

留意事項

  • Java Iterator は、Java 1.2 Collection フレームワークの Java プログラミング言語に追加されたインターフェイスです。これは java.util パッケージに属します。
  • これは、コレクション フレームワークのオブジェクトを横断するために使用される Java カーソルの 1 つです。
  • Java Iterator は、コレクション オブジェクトのコンポーネントを 1 つずつ反復するために使用されます。
  • Java イテレータは、コレクション フレームワークのすべてのクラスに適しているため、Java のユニバーサル カーソルとしても知られています。
  • Java Iterator は、READ や REMOVE などの操作もサポートします。
  • Iterator クラスのメソッド名は、Enumeration Iterator のメソッド名に比べて非常にシンプルで使いやすいです。