Javaのイテレータ

Javaのイテレータ

Java のイテレータは、最も一般的に使用されるものの 1 つです。 Java Collections Frameworkのカーソル 。これは、コレクションの要素を 1 つずつトラバースまたは反復するために使用されます。

  • これは、要素を順方向にのみトラバースするために使用されます。
  • トラバーサル中に、remove() を使用して要素を安全に削除します。
  • Iterator は、すべてのコレクション タイプ (リスト セットとキュー) に適用されるユニバーサル カーソルです。

イテレータの宣言

パブリックインターフェースイテレータ

ここで、E は反復処理される要素のタイプを表します。

イテレータのオブジェクト作成

Iterator オブジェクトは、コレクション オブジェクトで iterator() メソッドを呼び出すことによって作成されます。ここでは、イテレータを使用して、各要素を走査して出力します。 配列リスト

コレクション names = 新しい ArrayList <>();
イテレーター itr = 名前.iterator();

Java
   import     java.util.ArrayList  ;   import     java.util.Iterator  ;   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     {          // Create an ArrayList and add some elements      ArrayList   <  String  >     al     =     new     ArrayList   <>  ();      al  .  add  (  'A'  );      al  .  add  (  'B'  );      al  .  add  (  'C'  );      // Obtain an iterator for the ArrayList      Iterator   <  String  >     it     =     al  .  iterator  ();      // Iterate through the elements and print each one      while     (  it  .  hasNext  ())     {          // Get the next element      String     n     =     it  .  next  ();         System  .  out  .  println  (  n  );         }      }   }   

出力
A B C  

イテレータの階層

イテレータは、 java.util パッケージ すべてのコレクション クラスによってサブインターフェイスを通じて実装されます。

listiterator_extends_iterator_イテレータとカーソル

イテレータインターフェイスのメソッド

イテレータ インターフェイスは、以下に示す 3 つのメソッドを定義します。

  • hasNext(): 反復にさらに多くの要素がある場合は true を返します。
  • 次(): 反復内の次の要素を返します。それは投げます NoSuchElementException それ以上の要素が存在しない場合。
  • 取り除く(): next() によって返された最後の要素を削除します。このメソッドは、next() の呼び出しごとに 1 回だけ呼び出すことができます。

注記 :remove() メソッドは、次の 2 つの例外をスローすることがあります。

内部作業

このセクションでは、Java Iterator とそのメソッドが内部でどのように動作するかを理解しようとします。この機能を理解するために、次の LinkedList オブジェクトを取り上げてみましょう。

ステップ 1: 次に、以下に示すように、List オブジェクト上に Iterator オブジェクトを作成しましょう。

イテレータ cityIterator = city.iterator();

「citiesIteartor」イテレータは以下のようになります。

Java イテレータ ステップ 1ステップ-1

ここで、イテレータのカーソルはリストの最初の要素の前を指しています。

ステップ 2: ここで、次のコード スニペットを実行します。

cityIterator.hasNext();
cityIterator.next();

Java イテレータ ステップ 2ステップ-2

上記のコード スニペットを実行すると、上の図に示すように、Iterator のカーソルはリストの最初の要素を指します。

ステップ 3: ここで、次のコード スニペットを実行します。

cityIterator.hasNext();
cityIterator.next();

Java イテレータ ステップ 3ステップ-3


上記のコード スニペットを実行すると、上の図に示すように、Iterator のカーソルはリストの 2 番目の要素を指します。

ステップ 4: このプロセスを実行して、イテレータのカーソルをリストの最後の要素に到達させます。

Java イテレータのステップ nステップ-4

ステップ5: 最後の要素を読み取った後、以下のコード スニペットを実行すると false 値が返されます。

cityIterator.hasNext();

最後のJavaイテレータ

イテレータのカーソルがリストの最後の要素の後ろを指しているため hasNext() メソッドは false 値を返します。

注記: Java Iterator は順方向の反復のみをサポートするため、単方向カーソルと呼ばれます。対照的に、ListIterator は双方向であり、両方向のトラバースが可能です。

Java-Ilterator-6Java イテレータ: 順方向

例: ここでは、Iterator を使用して ArrayList を走査し、奇数の要素を削除します。

Java
   import     java.util.ArrayList  ;   import     java.util.Iterator  ;   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     {          // Creating an ArrayList of Integer type      ArrayList   <  Integer  >     al     =     new     ArrayList   <>  ();      // Adding elements to the ArrayList      for     (  int     i     =     0  ;     i      <     10  ;     i  ++  )     {      al  .  add  (  i  );      }      // Printing the original list      System  .  out  .  println  (  'Original List: '     +     al  );      // Creating an Iterator for the ArrayList      Iterator   <  Integer  >     itr     =     al  .  iterator  ();      // Iterating through the list and removing odd elements      while     (  itr  .  hasNext  ())     {          // Getting the next element      int     i     =     itr  .  next  ();             System  .  out  .  print  (  i     +     ' '  );         // Removing odd elements      if     (  i     %     2     !=     0  )     {      itr  .  remove  ();      }      }      System  .  out  .  println  ();      // Printing the modified list after removal of odd elements      System  .  out  .  println  (  'Modified List: '     +     al  );      }   }   

出力
Original List: [0 1 2 3 4 5 6 7 8 9] 0 1 2 3 4 5 6 7 8 9 Modified List: [0 2 4 6 8]  

説明: 上の例では、整数の ArrayList を作成し、Iterator を使用してそれを反復処理し、すべての奇数を削除します。奇数要素を削除する前後のリストを出力し、偶数のみを含む変更されたリストを出力します。