remove
- Java kursu
- Orta seviye
- Ders 95/116
- 5 dk
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
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
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
String s = it.next();
if (s.isEmpty()) {
it.____();
}
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 |