Java'da koleksiyonlar üzerinde yineleme yapmanın yolları nelerdir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Java'da koleksiyonlar üzerinde yineleme yapmanın birkaç yolu vardır:
-
İndeks kullanarak
fordöngüsü (örneğinArrayList,LinkedListgibi indeks erişimini destekleyen koleksiyonlar için):
İndeks erişimi verimli olan koleksiyonlar için uygundur.// ArrayList üzerinde yineleme örneği ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); for (int i = 0; i < list.size(); i++) { String element = list.get(i); System.out.println(element); } -
Gelişmiş
fordöngüsü (Enhanced for loop / for-each):
Çoğu durumda en yaygın ve kullanışlı yöntemdir.Iterablearayüzünü uygulayan tüm koleksiyonlar için uygundur.// ArrayList üzerinde for-each ile örnek ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); for (String element : list) { System.out.println(element); } -
Iteratorkullanımı:
Daha esnek bir yöntem olup, yineleme sırasında öğeleri silmeye olanak tanır. Tüm koleksiyonlar için uygundur.// Iterator kullanarak yineleme örneği ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String element = iterator.next(); System.out.println(element); // Güvenli bir şekilde öğeleri silebilirsiniz // if (element.equals("B")) { // iterator.remove(); // } } -
ListIteratorkullanımı (listeler için):
Listarayüzünü uygulayan koleksiyonlar için özel bir yineleyicidir. İleri ve geri hareket edebilir, öğeleri ekleyip değiştirebilir.// ListIterator ile yineleme örneği ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); ListIterator<String> listIterator = list.listIterator(); while (listIterator.hasNext()) { String element = listIterator.next(); System.out.println(element); } // Geriye doğru yineleme örneği while (listIterator.hasPrevious()) { String element = listIterator.previous(); System.out.println(element); } -
Streams API (Java 8 ve sonrası):
Fonksiyonel yaklaşım, lambda ifadeleri kullanır. Koleksiyonun öğeleri üzerinde işlemler yapmaya (filtreleme, dönüştürme vb.) olanak tanır ve bu işlemler deklaratif bir tarzda yapılır. Yineleme "dahili" olarak gerçekleşir.// Streams API kullanarak yineleme örneği ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.stream() .forEach(element -> System.out.println(element)); // Filtreleme ve dönüştürme örneği // list.stream() // .filter(element -> element.startsWith("A")) // .map(String::toLowerCase) // .forEach(System.out::println);
Yöntemin seçimi, belirli göreve, koleksiyon türüne ve performans gereksinimlerine bağlıdır. Çoğu durumda, gelişmiş for döngüsü en uygun olanıdır. Öğeleri yineleme sırasında silmek gerekiyorsa, Iterator kullanılmalıdır. İki yönlü yineleme gereken listeler için ListIterator uygundur. Streams API ise veri işleme konusunda güçlü olanaklar sunar.