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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ListとSetの概要
- Iteratorと拡張for
- Collectionsユーティリティ