Sobes.tech
Junior

Milyen módjai vannak a Java-ban a kollekciók iterálásának?

sobes.tech MI

Válasz az MI-től

A Java-ban többféle módon lehet iterálni a gyűjteményeken:

  • for ciklus index használatával (például ArrayList, LinkedList esetén, amelyek támogatják az indexelést):
    Akkor alkalmas, ha az elemekhez való hozzáférés index alapján hatékony.

    // ArrayList iterálási példa
    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);
    }
    
  • Bővített for ciklus (Enhanced for loop / for-each loop):
    A leggyakoribb és legkényelmesebb módszer. Bármilyen Iterable interfészt megvalósító gyűjteményhez alkalmas.

    // ArrayList iterálási példa for-each használatával
    ArrayList<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    list.add("C");
    
    for (String element : list) {
        System.out.println(element);
    }
    
  • Iterator használata:
    Rugalmasabb módszer, lehetővé teszi az elemek törlését az iteráció során. Minden gyűjteményhez alkalmas.

    // Iterator használatával iterálás példa
    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);
        // Biztonságosan lehet törölni elemeket
        // if (element.equals("B")) {
        //     iterator.remove();
        // }
    }
    
  • ListIterator használata (listákhoz):
    Speciális iterator a List interfészt megvalósító gyűjteményekhez. Lehetővé teszi az előre és hátra történő navigációt, valamint az elemek hozzáadását és módosítását.

    // ListIterator használat példa
    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);
    }
    // Hátra irányuló iterálás példa
    while (listIterator.hasPrevious()) {
        String element = listIterator.previous();
        System.out.println(element);
    }
    
  • Streams API (Java 8-tól):
    Funkcionális megközelítés lambda kifejezésekkel. Lehetővé teszi műveletek végrehajtását a gyűjtemény elemein (szűrés, átalakítás stb.) deklaratív módon. Az iteráció "belső" módon történik a streamen belül.

    // Streams API használat példa
    ArrayList<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    list.add("C");
    
    list.stream()
        .forEach(element -> System.out.println(element));
    
    // Szűrés és átalakítás példák
    // list.stream()
    //     .filter(element -> element.startsWith("A"))
    //     .map(String::toLowerCase)
    //     .forEach(System.out::println);
    

A megfelelő módszer a konkrét feladattól, a gyűjtemény típusától és a teljesítményigényektől függ. A legtöbb esetben a bővített for ciklus a legkényelmesebb. Ha elemek törlésére van szükség az iteráció során, akkor az Iterator használata javasolt. Listák esetén, ahol kétirányú iteráció szükséges, a ListIterator a megfelelő. A Streams API erőteljes lehetőségeket kínál az adatok deklaratív feldolgozására.