やあ!今日のレッスンでは、Java Iterator について話します。あなたが図書館に行って、特定の本を探していると想像してください。どうやってやるのですか?ノンフィクションなら、デューイ十進法があります。フィクションの場合は、姓のアルファベット順に並べられます。探しているものが何であれ、ある時点で、探しているものが見つかるまで本を 1 冊ずつ読まなければなりません。Java でオブジェクトのコレクションがある場合、それがArray、ArrayList、Queue、Listのいずれに格納されているかに関係なく、特定の値をどのように見つけますか? ある時点で、各要素を一度に 1 つずつ確認する必要があります。これが Java イテレータの目的です。

Javaのイテレータとは何ですか
Javaのイテレータとは何ですか? これは、コレクション内の各要素を確認する方法です。コレクションとは、Collectionクラス内のあらゆるものを意味します。これも:- 配列リスト
- ハッシュセット
- リンクされたハッシュセット
- リンクリスト
- 優先キュー
- ベクター
- 他にもたくさん…
Java で For ループをイテレータとして使用してはいけない理由
Java でコレクションを反復処理する方法を誰もが最初に教えられる方法の 1 つは、ループです。次のようになります。
class Main {
public static void main(String[] args) {
int exampleArray[] = new int[10];
//fill array with data
for(int x = 0; x < exampleArray.length; x++) {
System.out.println("Content of element " + x + "is: " + exampleArray[x]);
}
}
}
出力は次のようなリストになります。
Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
これには用途がありますが、コレクションがインデックスベースのシステムに要素を格納しない場合はどうなるのでしょうか? たとえば、Setには通常順序がありません。したがって、Java で for ループをイテレータとして使用する習慣をやめ、代わりにIterator<E>クラスを使用する練習をすることをお勧めします。Java イテレータの例をいくつか示します。
Javaでイテレータを使用する方法
Java でイテレータを使用する方法の例をいくつか示します。イテレータ クラスを使用する場合、コレクションを走査する方法は 3 つあります。while()ループ、for()ループ、およびforEach()ループを使用できます。この for ループは前に説明したものとは異なることに注意してください。以下に 3 つの異なる Java イテレータの例を示します。まず、反復処理する コレクションを設定しましょう。
import java.util.*; // imports ArrayList, Collection and Iterator
class Main {
public static void main(String[] args) {
Collection<String> example = new ArrayList<String>();
example.add("Item 1");
example.add("Item 2");
example.add("Item 3");
example.add("Item 4");
}
}
これは、4 つの項目をロードしたArrayListで構成される 単純なコレクションです。次に、 Iterator クラスを使用してArrayListを走査する 3 つのメソッドを見てみましょう。
While() ループ
Iterator<String> iterator = example.iterator();
while (iterator.hasNext()) {
System.out.println("Element Value= " + iterator.next());
}
このwhile()ループは、Iteratorクラスの.hasNext() Boolean メソッドを使用して、将来の要素があるかどうかを確認します。前提条件が true の場合、処理は続行されます。false が返された場合、ループは終了します。ここで重要なのは、.hasNext() メソッドと.next()メソッドの両方が最初の要素の初期チェックを行うことです。Collectionが空で最初の要素がない場合、メソッドは.hasNext()に対して false を返し、 .next()メソッドに対してNoSuchElementExceptionをスローします。
forループ
for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
System.out.println("Element Value= " + iterator.next());
}
これは、より伝統的な for ループのように見えます。条件のチェックと変更部分として.hasNext()メソッドを使用します。初期化はイテレータの呼び出しです。
For:各ループ
for (String s : example) {
System.out.println("Element Value= " + s);
}
For :Eachループはforループですが、読み方が分からないと少し分かりにくいかもしれません。For:Eachループの構文は、for (data_type variableName : collectionName){ body}です。このfor:eachループにはいくつかの欠点があります。まず、コレクションを一方向にのみ走査できます。次に、各要素を反復処理する必要があります。どれもスキップすることはできません。しかし、Java の便利なリスト反復子としては、これが最良の選択肢です。プラスの面としては、for:eachループは非常に読みやすく、一度知ってしまえば間違うのは困難です。3 つの反復子ループの出力が何であるか疑問に思っている場合は、それらはすべて同じです。
Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4
Java でマップ用イテレータを使用する方法
マップはデータを保存する一般的な方法ですが、 Collection を拡張しないため、前のイテレータを使用してマップを直接走査することはできません。では、Java でイテレータを使用してMapとHashMapを処理するにはどうすればよいでしょうか? 優れた Java マップ反復子メソッドが 4 つあります。個別に説明します。まず、一連の値を含むマップをロードしましょう。
import java.util.*; //imports Map and HashMap
class Main {
public static void main(String[] args) {
Map<String, String> example = new HashMap<String, String>();
example.put("alpha", "one");
example.put("beta", "two");
example.put("gamma", "three");
}
}
Java ハッシュマップ イテレータ メソッド: forEach(action)
example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
このメソッドはラムダ式を使用して反復処理します。ラムダ演算子はforEach()メソッドであり、本体は値を出力します。これには複数のパラメータ演算子が使用されます。これは、Java 8 のマップ イテレータの最も高速でクリーンなメソッドです。
Java ハッシュマップ イテレータ メソッド: For:Each() ループ
for (Map.Entry<String, String> iterate : example.entrySet()) {
System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
これは、For:Each構文を使用して、 entrySet()メソッドを呼び出し、要素としてキーと値を持つセットを返します。さらに、.Entry()メソッドを使用する場合、オブジェクトはこの反復が行われている間のみ true になります。
Java ハッシュマップ イテレータ メソッド: Map.Entry<k, v>
Iterator<Map.Entry<String, String>> iterator = example.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, String> element = iterator.next();
System.out.println("Key: " + element.getKey() + ", Value: " + element.getValue());
)
このメソッドは、コレクションイテレータとメソッドを使用するためにマップをセットに再度変換します。これら 3 つの反復子メソッドの場合、戻り値は次のようになります。
Key: alpha, Value: one
Key: beta, Value: two
Key: gamma, Value: three
Java Hashmap Iterator Method: keySet() and values()
for (String key : example.keySet()) {
System.out.println("Key: " + key);
}
for (String value : example.values()) {
System.out.println("Value: " + value);
}
これは、別の方法で要素を返します。まずすべてのキーを順番に返し、次にすべての値を返します。
Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three
GO TO FULL VERSION