CodeBlanks Logo Icon CodeBlanks

Iterable

Iterable ile for-each desteğini öğrenirsin.

Iterable<T> arayüzü

Iterable<T>, bir sınıfın for-each döngüsünde kullanılabilmesini sağlayan arayüzdür. Iterator<T> iterator() metodunu uygulayan her sınıf Iterable olur. List, Set ve Queue arayüzlerinin hepsi Iterable'ı miras alır.

Kendi sınıfına Iterable uygulayınca for (String s : myObject) döngüsü çalışır. Bu, koleksiyon olmayan bir yapıyı da dolaşılabilir kılar; örneğin bir ağaç, satır listesi ya da sayı aralığı Iterable yapılabilir.

Özel Iterable örneği

Bir Names sınıfı Iterable<String> uyguladığında şöyle çalışır: içinde List<String> items alanı tutar, iterator() metodu items.iterator() döndürür. Dışarıdan for (String n : names) yazıldığında Java bu metodu çağırır.

Bu yöntem, iç veriyi gizleyip yalnızca okuma erişimi vermenin temiz bir yoludur. Kullanıcı listeyi doğrudan göremez ama Iterator üzerinden dolaşabilir. Sıfırdan Iterator yazmak gerekmez; iç liste zaten Iterable'dır.

Uygulama Özel Iterable sınıfı yaz

class Names implements Iterable<String> tanımla. İçinde List<String> items = new ArrayList<>(); alanı tut; void add(String n) metodu items.add(n); yapsın. @Override public Iterator<String> iterator() metodu items.iterator() döndürsün. main içinde Names names = new Names(); oluştur, iki isim ekle, for (String n : names) System.out.println(n); ile yazdır.

Başlangıç kodu

Main.java
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

// Names sınıfını tanımla: Iterable<String>, items listesi, add, iterator

public class Main {
    public static void main(String[] args) {
        // Names oluştur, iki isim ekle, for-each ile yazdır

    }
}

Örnek çözüm

Main.java
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

class Names implements Iterable<String> {
    List<String> items = new ArrayList<>();
    void add(String n) { items.add(n); }
    public Iterator<String> iterator() { return items.iterator(); }
}

public class Main {
    public static void main(String[] args) {
        Names names = new Names();
        names.add("Ayşe");
        names.add("Alex");
        for (String n : names) {
            System.out.println(n);
        }
    }
}

Beklenen çıktı

Ayşe
Alex

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir sınıf Iterable olduğunda ne kazanırsın?

  • Comparable yeteneği
  • Sıralama yeteneği
  • for-each döngüsü desteği Doğru cevap
  • Çoklu kalıtım

Açıklama: Iterable uygulayan sınıf for-each ile dolaşılabilir.

2 Sınıf bildirimini tamamla

Soru
class Names implements Iterable<String> {
    public Iterator<String> ____() {
        return items.iterator();
    }
}
Cevap
class Names implements Iterable<String> {
    public Iterator<String> iterator() {
        return items.iterator();
    }
}

Açıklama: iterator metodu Iterable'ın tek zorunlu metodudur.

3 Iterable kavramlarını eşleştir

Kavram Anlamı
Iterable<T> for-each izni veren arayüz
iterator() Tek zorunlu metot
List Iterable mirascısı
for-each Kısa döngü sözdizimi

Orta seviye bölümündeki tüm dersler