1. 概要

このチュートリアルでは、 for -Javaの各ループについて、構文、動作、およびコード例とともに説明します。 最後に、その長所と短所を理解します。

2. ループ用のシンプルな

シンプル forループ Javaでは、基本的に3つの部分があります–初期化、 ブール値条件とステップ:

for (initialization; boolean-condition; step) {
    statement;
}

ループ変数の初期化から始まり、boolean式が続きます。 条件がtrueの場合、ループ内でステートメントを実行し、ループ変数をインクリメント/デクリメントします。 それ以外の場合は、ループを終了します。

このパターンは少し複雑で読みにくくなります。 さらに、条件を適切に記述しないと、常に無限ループに陥る可能性があります。

3. for-各ループ

for-各ループはJava5で導入されました。 これを拡張forループとも呼びます。

これは、配列またはコレクションをトラバースするために特別に導入された代替のトラバース手法です。 注目すべきことに、forキーワードも使用しています。 ただし、ループカウンター変数を使用する代わりに、配列またはコレクションと同じタイプの変数を割り当てます。

for という名前-それぞれは、配列またはコレクションの各要素が次々にトラバースされることを意味します。

3.1. 構文

for -各ループは、ループ変数の宣言とそれに続くコロン(:)で構成され、その後に配列またはコレクションの名前が続きます。

for (data_type var_name : array | collection) {
    // code
}

3.2. 働く

反復ごとに、 for -各ループはコレクションの各要素を取得し、それをループ変数に格納します。 したがって、配列またはコレクションの各要素に対して、ループの本体に記述されたコードを実行します。

最も重要なのは、トラバーサルが配列またはコレクションの最後の要素まで発生することです。

3.3. 例

forを使用して配列をトラバースする例を見てみましょう-各ループ:

int numbers[] = { 1, 2, 3, 4, 5 };

for (int number : numbers) {
    System.out.print(number + " ");
}

ここで、 for -各ループは、配列番号の各要素を最後まで1つずつトラバースします。 したがって、インデックスを使用して配列要素にアクセスする必要はありません。

ここで、for-各ループを使用してさまざまなコレクションをトラバースする例をいくつか見てみましょう。

リストから始めましょう:

String[] wordsArray = { "Java ", "is ", "great!" };
List<String> wordsList = Arrays.asList(wordsArray);

for (String word : wordsList) {
    System.out.print(word + " ");
}

同様に、Setのすべての要素をトラバースできます。

Set<String> wordsSet = new HashSet();
wordsSet.addAll(wordsList);

for (String word : wordsSet) {
    System.out.print(word + " ");
}

また、 為に -トラバースする各ループ地図同じように:

Map<Integer, String> map = new HashMap<>();
map.put(1, "Java");
map.put(2, "is");
map.put(3, "great!");

for (Entry<Integer, String> entry : map.entrySet()) {
    System.out.println(
      "number: " + entry.getKey() +
      " - " +
      "Word: " + entry.getValue());
}

同様に、 for -各ループを使用して、Javaの他のさまざまなデータ構造を反復処理できます。

ただし、配列またはコレクションが null の場合、NullPointerExceptionがスローされます。

int[] numbers = null;
for (int number : numbers) {
    System.out.print(number + " ");
}

上記のコードはNullPointerExceptionをスローします。

Exception in thread "main" java.lang.NullPointerException
    at com.baeldung.core.controlstructures.loops.ForEachLoop.traverseArray(ForEachLoop.java:63)
    ..

したがって、 for -各ループに渡す前に、配列またはコレクションがnullであるかどうかを確認する必要があります。

for -配列またはコレクションが空の場合、各ループはまったく実行されません。

3.4. 長所と短所

for -各ループは、Java5で導入された重要な機能の1つです。 ただし、独自の長所と短所もあります。

forの利点-各ループは次のとおりです。

  • プログラミングエラーを回避するのに役立ちます。
  • これにより、コードが正確で読みやすくなります。
  • 実装が簡単です。
  • 無限ループの可能性を回避します。

これらの利点があるため、特に配列やコレクションを操作する場合は、for-各ループをforループよりも優先します。

forの欠点-各ループは次のとおりです。

  • 要素が各要素を通過するときに、要素を飛び越えることはできません。
  • 逆の順序でトラバースすることはできません。
  • for -各ループを使用している場合、配列を変更することはできません。
  • インデックスを追跡することはできません。
  • forループよりもパフォーマンスのオーバーヘッドがあります。

4. 結論

この記事では、 for -Javaの各ループとその構文、動作、および例について説明しました。 最後に、その長所と短所を見ました。

いつものように、これらの例のコードはGitHubから入手できます。