Javaのイテレータ
Java のイテレータは、最も一般的に使用されるものの 1 つです。 Java Collections Frameworkのカーソル 。これは、コレクションの要素を 1 つずつトラバースまたは反復するために使用されます。
- これは、要素を順方向にのみトラバースするために使用されます。
- トラバーサル中に、remove() を使用して要素を安全に削除します。
- Iterator は、すべてのコレクション タイプ (リスト セットとキュー) に適用されるユニバーサル カーソルです。
イテレータの宣言
パブリックインターフェースイテレータ
ここで、E は反復処理される要素のタイプを表します。
イテレータのオブジェクト作成
Iterator オブジェクトは、コレクション オブジェクトで iterator() メソッドを呼び出すことによって作成されます。ここでは、イテレータを使用して、各要素を走査して出力します。 配列リスト 。
Javaコレクション
names = 新しい ArrayList <>();
イテレーターitr = 名前.iterator();
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 パッケージ すべてのコレクション クラスによってサブインターフェイスを通じて実装されます。
イテレータとカーソル イテレータインターフェイスのメソッド
イテレータ インターフェイスは、以下に示す 3 つのメソッドを定義します。
- hasNext(): 反復にさらに多くの要素がある場合は true を返します。
- 次(): 反復内の次の要素を返します。それは投げます NoSuchElementException それ以上の要素が存在しない場合。
- 取り除く(): next() によって返された最後の要素を削除します。このメソッドは、next() の呼び出しごとに 1 回だけ呼び出すことができます。
注記 :remove() メソッドは、次の 2 つの例外をスローすることがあります。
内部作業
このセクションでは、Java Iterator とそのメソッドが内部でどのように動作するかを理解しようとします。この機能を理解するために、次の LinkedList オブジェクトを取り上げてみましょう。
ステップ 1: 次に、以下に示すように、List オブジェクト上に Iterator オブジェクトを作成しましょう。
イテレータ
cityIterator = city.iterator();
「citiesIteartor」イテレータは以下のようになります。
ステップ-1 ここで、イテレータのカーソルはリストの最初の要素の前を指しています。
ステップ 2: ここで、次のコード スニペットを実行します。
cityIterator.hasNext();
cityIterator.next();
ステップ-2 上記のコード スニペットを実行すると、上の図に示すように、Iterator のカーソルはリストの最初の要素を指します。
ステップ 3: ここで、次のコード スニペットを実行します。
cityIterator.hasNext();
cityIterator.next();
ステップ-3
上記のコード スニペットを実行すると、上の図に示すように、Iterator のカーソルはリストの 2 番目の要素を指します。
ステップ 4: このプロセスを実行して、イテレータのカーソルをリストの最後の要素に到達させます。
ステップ-4 ステップ5: 最後の要素を読み取った後、以下のコード スニペットを実行すると false 値が返されます。
cityIterator.hasNext();
イテレータのカーソルがリストの最後の要素の後ろを指しているため hasNext() メソッドは false 値を返します。
注記: Java Iterator は順方向の反復のみをサポートするため、単方向カーソルと呼ばれます。対照的に、ListIterator は双方向であり、両方向のトラバースが可能です。
Java イテレータ: 順方向 例: ここでは、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 を使用してそれを反復処理し、すべての奇数を削除します。奇数要素を削除する前後のリストを出力し、偶数のみを含む変更されたリストを出力します。