CodeBlanks Logo Icon CodeBlanks

remove

Iterator.remove ile güvenli silmeyi öğrenirsin.

iterator.remove() metodu

Bir dolaşma sırasında eleman silmek için iterator.remove() kullanılır. Bu metot, en son next() ile döndürülen elemanı koleksiyondan çıkarır. Aynı Iterator üzerinde next'i çağırmadan remove yapılırsa IllegalStateException fırlatılır.

For-each döngüsü içinde listeyi değiştirmek yasaktır; ConcurrentModificationException fırlatılır. Bu yüzden koşullu silme için Iterator'un remove metodu güvenli yoldur.

Koşullu silme kalıbı

Koşullu silmenin klasik kalıbı: while (it.hasNext()) { String s = it.next(); if (koşul) it.remove(); }. Her silmeden sonra Iterator imleci hâlâ geçerli yerdedir; bir sonraki next çağrısı yeni elemanı verir.

Bu kalıp bir listeden belirli bir koşulu sağlayan elemanları temizlemek için idealdir. Örneğin s.length() > 5 koşulu uzun isimleri, s.isEmpty() boş dizeleri atar. remove her next için en fazla bir kez çağrılabilir.

Uygulama Uzun isimleri Iterator ile sil

List<String> names = new ArrayList<>(); tanımla; "Ayşe", "Alexander", "Alex" ekle. Iterator<String> it = names.iterator(); ile Iterator al. while (it.hasNext()) döngüsü içinde String s = it.next(); çağr; s.length() > 5 ise it.remove(); ile sil. Döngüden sonra System.out.println(names.size()); ile kalan eleman sayısını yazdır.

Başlangıç kodu

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

public class Main {
    public static void main(String[] args) {
        // List<String> tanımla, 3 isim ekle, Iterator ile 5'ten uzunları sil, kalan sayı

    }
}

Örnek çözüm

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

public class Main {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("Ayşe");
        names.add("Alexander");
        names.add("Alex");
        Iterator<String> it = names.iterator();
        while (it.hasNext()) {
            String s = it.next();
            if (s.length() > 5) it.remove();
        }
        System.out.println(names.size());
    }
}

Beklenen çıktı

2

Soru ve cevaplar

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

1 Silme çağrısını tamamla

Soru
String s = it.next();
if (s.isEmpty()) {
    it.____();
}
Cevap
String s = it.next();
if (s.isEmpty()) {
    it.remove();
}

Açıklama: remove metodu son okunan elemanı siler.

2 it.remove() ne zaman IllegalStateException fırlatır?

  • next çağrılmadan önce Doğru cevap
  • HasNext false döndüğünde
  • remove iki kez çağrıldığında
  • Liste boşken

Açıklama: next çağrılmadan remove yapılırsa IllegalStateException fırlatılır.

3 remove davranışlarını eşleştir

Kavram Anlamı
remove() Son okunanı siler
IllegalStateException next olmadan remove
ConcurrentModificationException For-each içinde silme
next() remove öncesi zorunlu

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