Iterable
- Java kursu
- Orta seviye
- Ders 97/116
- 5 dk
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
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
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
class Names implements Iterable<String> {
public Iterator<String> ____() {
return items.iterator();
}
}
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 |