Sobes.tech
Junior

Millised on viisid, kuidas Java-s kollektsioone läbi käia?

sobes.tech AI

Vastus AI-lt

Java keeles on mitmeid viise, kuidas iteratsioonide teha kogumite üle:

  • for tsükkel indeksiga (sobib kogumitele, mis toetavad indekspõhist juurdepääsu, näiteks ArrayList, LinkedList):
    Sobib kogumitele, kus indeksi põhine juurdepääs on tõhus.

    // Näide ArrayList-i iteratsioonist
    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);
    }
    
  • Täiustatud for-tsükkel (Enhanced for loop / for-each loop):
    Kõige levinum ja mugavaim viis enamikul juhtudel. Sobib kõigile kogumitele, mis implementeerivad Iterable liidest.

    // Näide ArrayList-i iteratsioonist for-each abil
    ArrayList<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    list.add("C");
    
    for (String element : list) {
        System.out.println(element);
    }
    
  • Iterator-i kasutamine:
    Paindlikum viis, mis võimaldab elemente eemaldada iteratsiooni ajal. Sobib kõigile kogumitele.

    // Näide `Iterator`-i kasutamisest
    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);
        // Võimalik ohutult eemaldada elemente
        // if (element.equals("B")) {
        //     iterator.remove();
        // }
    }
    
  • ListIterator-i kasutamine (sõnaraamatute jaoks):
    Spetsialiseeritud iterator, mis implementeerib List-liidest. Võimaldab liikuda nii edasi kui tagasi ning lisada ja muuta elemente.

    // Näide `ListIterator`-i kasutamisest
    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);
    }
    // Tagasi liikumise näide
    while (listIterator.hasPrevious()) {
        String element = listIterator.previous();
        System.out.println(element);
    }
    
  • Streams API (alates Java 8):
    Funktsionaalne lähenemine lambdaväljenditega. Võimaldab teha operatsioone kogumi elementidega (filtreerimine, teisendamine jne) deklaratiivses stiilis. Iteratsioon toimub "sisemiselt" voolu kaudu.

    // Näide Streams API kasutamisest
    ArrayList<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    list.add("C");
    
    list.stream()
        .forEach(element -> System.out.println(element));
    
    // Filtreerimise ja teisendamise näide
    // list.stream()
    //     .filter(element -> element.startsWith("A"))
    //     .map(String::toLowerCase)
    //     .forEach(System.out::println);
    

Valik meetodist sõltub konkreetse ülesande, kogumi tüübi ja nõutava jõudluse järgi. Enamikel juhtudel on kõige mugavam kasutata täiendatud for-tsüklit. Kui on vaja elemente eemaldada iteratsiooni ajal, kasutage Iterator-it. Sõnaraamatute puhul, kus on vaja kahemõõtmelist iteratsiooni, sobib ListIterator. Streams API pakub võimsaid võimalusi andmete töötlemiseks deklaratiivses stiilis.