Sobes.tech
Junior

Kādi ir veidi, kā iterēt pār kolekcijām Java?

sobes.tech AI

Atbilde no AI

Java valodā ir vairākas veidi, kā iterēt pār kolekcijām:

  • for cikls ar indeksu (piemērots kolekcijām, kas atbalsta indeksētu piekļuvi, piemēram, ArrayList, LinkedList):
    Der kolekcijām, kurās piekļuve pēc indeksa ir efektīva.

    // Piemērs ar `ArrayList` iterāciju
    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);
    }
    
  • Uzlabots for cikls (Enhanced for loop / for-each loop):
    Visbiežāk izmantotais un ērtākais veids lielākajā daļā gadījumu. Der jebkurām kolekcijām, kas realizē Iterable interfeisu.

    // Piemērs ar `ArrayList` iterāciju ar for-each
    ArrayList<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    list.add("C");
    
    for (String element : list) {
        System.out.println(element);
    }
    
  • Iterator izmantošana:
    Elastīgāka metode, kas ļauj dzēst elementus iterācijas laikā. Der visām kolekcijām.

    // Piemērs ar `Iterator`
    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);
        // Droši var dzēst elementus
        // if (element.equals("B")) {
        //     iterator.remove();
        // }
    }
    
  • ListIterator izmantošana (sarakstiem):
    Specializēts iterators, kas realizē List interfeisu. Atļauj pārvietoties gan uz priekšu, gan atpakaļ, kā arī pievienot un mainīt elementus.

    // Piemērs ar `ListIterator`
    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);
    }
    // Pāreja uz atpakaļ
    while (listIterator.hasPrevious()) {
        String element = listIterator.previous();
        System.out.println(element);
    }
    
  • Streams API (no Java 8):
    Funkcionāls pieejas veids ar lambda izteiksmēm. Atļauj veikt operācijas pār kolekcijas elementiem (filtrēšana, pārveidošana utt.) deklaratīvā stilā. Iterācija notiek "iekšēji" caur straumi.

    // Piemērs ar Streams API
    ArrayList<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    list.add("C");
    
    list.stream()
        .forEach(element -> System.out.println(element));
    
    // Filtrēšanas un pārveidošanas piemērs
    // list.stream()
    //     .filter(element -> element.startsWith("A"))
    //     .map(String::toLowerCase)
    //     .forEach(System.out::println);
    

Izvēlētā metode ir atkarīga no konkrētās uzdevuma, kolekcijas veida un nepieciešamās veiktspējas. Lielākajā daļā gadījumu visērtākais ir uzlabotais for cikls. Ja nepieciešams dzēst elementus iterācijas laikā, izmantojiet Iterator. Sarakstiem, kur nepieciešama divvirzienu iterācija, piemērots ir ListIterator. Streams API nodrošina jaudīgas iespējas datu apstrādei deklaratīvā stilā.