0Pricing
Java Academy · レッスン

Iteratorと拡張for

Iteratorと拡張forでコレクションを走査します。反復中に安全に削除する方法と、よくある落とし穴を学びます。

「Iteratorと拡張for」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全3レッスンが含まれています。

概要

Iteratorを使うと、コレクションを1要素ずつ細かく制御しながら走査できます。拡張for文(for-each)は短く、要素の読み取りに適しています。走査中に安全に削除する必要がある場合は Iterator を使います。

Iteratorと拡張for文

  • Iterator:要素を削除する可能性がある場合や、細かい制御が必要な場合に使います。
  • 拡張for文:読み取り専用のループに最適です。
  • 拡張for文の中でコレクションの構造を変更してはいけません。

コード:基本的なIterator

IteratorはhasNext()とnext()を使います。next()を呼び出すたびに前へ進み、要素を返します。

public class Main {
  public static void main(String[] args) {
    java.util.List<String> names = new java.util.ArrayList<>();
    names.add("Ada"); names.add("Bob"); names.add("Cyd");

    java.util.Iterator<String> it = names.iterator();
    while (it.hasNext()) {
      String s = it.next();
      System.out.println(s);
    }
  }
}

注意点

注意点:拡張for文の中で直接削除すると、多くの場合ConcurrentModificationExceptionが発生します。構造を安全に変更するには Iterator を使います。

コード:安全な削除

安全な削除:一致する要素が見つかったら、next()の直後に Iterator のremove()を呼び出します。

public class Main {
  public static void main(String[] args) {
    java.util.List<String> words = new java.util.ArrayList<>();
    words.add("to"); words.add("be"); words.add("or"); words.add("not");

    java.util.Iterator<String> it = words.iterator();
    while (it.hasNext()) {
      String w = it.next();
      if (w.length() <= 2) {
        it.remove(); // safe removal
      }
    }
    System.out.println(words); // [not]
  }
}

コード:拡張for文/forEach

拡張for文は読み取りに適しています。ラムダを使うforEachも、簡潔に書ける別の方法です(Java 8以降)。

public class Main {
  public static void main(String[] args) {
    java.util.Set<String> tags = new java.util.HashSet<>();
    tags.add("java"); tags.add("collections"); tags.add("oop");

    // enhanced for: read-only
    for (String t : tags) {
      System.out.print("[" + t + "]");
    }
    System.out.println();

    // Java 8+ forEach
    tags.forEach(t -> System.out.println("tag=" + t));
  }
}

Iteratorによる削除のチェック

クイックチェック:List を反復処理しながら要素を安全に削除するには、どうすればよいですか?

まとめ

まとめ:単純な読み取りには拡張for文を使います。走査中に要素を削除する必要がある場合は Iterator を使います。これにより実行時エラーを防げます。

よくある質問

「Iteratorと拡張for」レッスンは無料ですか?

はい。「Iteratorと拡張for」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全3レッスンが含まれています。

「Iteratorと拡張for」で何を学びますか?

Iteratorと拡張forでコレクションを走査します。反復中に安全に削除する方法と、よくある落とし穴を学びます。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。

「Iteratorと拡張for」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ListとSetの概要
  2. Iteratorと拡張for
  3. Collectionsユーティリティ
← Java Academyに戻る