Sobes.tech
Junior

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 for döngüsü (örneğin ArrayList, LinkedList gibi 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ş for döngüsü (Enhanced for loop / for-each):
    Çoğu durumda en yaygın ve kullanışlı yöntemdir. Iterable arayü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);
    }
    
  • Iterator kullanı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();
        // }
    }
    
  • ListIterator kullanımı (listeler için):
    List arayü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.