Aké sú spôsoby iterácie cez kolekcie v Jave?
sobes.tech AI
Odpoveď od AI
V jave existuje niekoľko spôsobov iterácie cez kolekcie:
-
Cyklus
fors použitím indexu (pre kolekcie podporujúce prístup cez index, napríkladArrayList,LinkedList):
Vhodné pre kolekcie, kde je prístup k prvkom cez index efektívny.// Príklad iterácie cez ArrayList 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); } -
Rozšírený
forcyklus (Enhanced for loop / for-each loop):
Najčastejšie a najpohodlnejšie. Vhodné pre akékoľvek kolekcie implementujúce rozhranieIterable.// Príklad iterácie cez ArrayList s použitím for-each ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); for (String element : list) { System.out.println(element); } -
Použitie
Iterator:
Flexibilnejší spôsob, umožňujúci odstraňovanie prvkov počas iterácie. Vhodné pre všetky kolekcie.// Príklad iterácie s použitím `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); // Môžete bezpečne odstraňovať prvky // if (element.equals("B")) { // iterator.remove(); // } } -
Použitie
ListIterator(pre zoznamy):
Špecializovaný iterator pre kolekcie implementujúce rozhranieList. Umožňuje pohyb dopredu aj dozadu, ako aj pridávanie a menenie prvkov.// Príklad iterácie s použitím `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); } // Príklad iterácie späť while (listIterator.hasPrevious()) { String element = listIterator.previous(); System.out.println(element); } -
Streams API (od Java 8):
Funkcionálny prístup s použitím lambda výrazov. Umožňuje vykonávať operácie nad prvkami kolekcie (filtering, transformácia atď.) deklaratívnym spôsobom. Iterácia prebieha "vnútorne" v rámci toku.// Príklad iterácie s použitím Streams API ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.stream() .forEach(element -> System.out.println(element)); // Príklad s filtrovaním a transformáciou // list.stream() // .filter(element -> element.startsWith("A")) // .map(String::toLowerCase) // .forEach(System.out::println);
Výber vhodného spôsobu závisí od konkrétneho úlohy, typu kolekcie a požadovaného výkonu. Pre väčšinu prípadov je najpohodlnejší rozšírený for cyklus. Ak je potrebné odstraňovať prvky počas iterácie, odporúča sa použiť Iterator. Pre zoznamy, kde je potrebná obojsmerná iterácia, je vhodný ListIterator. Streams API poskytuje mocné možnosti pre spracovanie dát deklaratívnym spôsobom.