CodeBlanks Logo Icon CodeBlanks

ListIterator

ListIterator ile çift yönlü gezinmeyi öğrenirsin.

ListIterator<E> arayüzü

ListIterator<E>, Iterator'ın iki yönlü genişletilmiş halidir; yalnızca List'te kullanılır. hasPrevious() ve previous() ile geriye gidebilirsin. listIterator() ile alınır; başlangıç imleci listenin başındadır.

Iterator'a ek olarak nextIndex(), previousIndex(), add(e) ve set(e) metotları vardır. add imlecin bulunduğu yere eleman ekler; set son döndürülen elemanı değiştirir. Geriye dönük tarama örneğin geri/ileri listelerinde kullanışlıdır.

Geriye dönük tarama

ListIterator ile önce ileri sonra geri gidebilirsin. İmleç her zaman elemanların arasında durur; next() sağdaki elemanı verir ve imleç sağa kayar, previous() soldaki elemanı verir ve imleç sola kayar. Bu yüzden next ve hemen ardından previous aynı elemanı iki kez verir.

Örneğin bir metin düzenleyicide imleç hareketlerini simüle etmek için ListIterator idealdir. set ile bir kelimeyi değiştirmek ya da add ile yeni kelime sokmak mümkündür.

Uygulama ListIterator ile ileri ve geri gez

List<String> names = new ArrayList<>(); tanımla; "Ayşe", "Alex" ekle. ListIterator<String> it = names.listIterator(); al. Önce it.next() ile bir eleman al ve System.out.println(it.previous()); ile geri dönüp aynı elemanı tekrar yazdır. Böylece next ve previous'ın aynı elemanı iki kez verdiği gösterilir.

Başlangıç kodu

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

public class Main {
    public static void main(String[] args) {
        // List<String> tanımla, iki isim ekle, ListIterator al, next sonra previous ile yazdır

    }
}

Örnek çözüm

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

public class Main {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("Ayşe");
        names.add("Alex");
        ListIterator<String> it = names.listIterator();
        System.out.println(it.next());
        System.out.println(it.previous());
    }
}

Beklenen çıktı

Ayşe
Ayşe

Soru ve cevaplar

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

1 ListIterator metotlarını eşleştir

Kavram Anlamı
hasPrevious() Geriye eleman var mı
previous() Önceki elemanı verir
add(e) İmlece eleman ekler
set(e) Son elemanı değiştirir

2 Geri çağrısını tamamla

Soru
while (it.has____()) {
    String s = it.previous();
}
Cevap
while (it.hasPrevious()) {
    String s = it.previous();
}

Açıklama: hasPrevious geriye eleman var mı diye sorar.

3 ListIterator hangi koleksiyonla çalışır?

  • Yalnızca Set
  • Yalnızca List Doğru cevap
  • Yalnızca Queue
  • Tüm koleksiyonlar

Açıklama: ListIterator yalnızca List'te kullanılır; çünkü indeks gerektirir.

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