Jaké jsou způsoby iterace přes kolekce v Java?
sobes.tech AI
Odpověď od AI
Existuje několik způsobů iterace přes kolekce v jazyce Java:
-
Cyklus
fors použitím indexu (pro kolekce podporující přístup podle indexu, napříkladArrayList,LinkedList):
Vhodné pro kolekce, kde je přístup k prvkům podle indexu efektivní.// Příklad iterace přes 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šířený cyklus
for(Enhanced for loop / for-each loop):
Nejčastější a nejpohodlnější způsob. Vhodné pro jakékoli kolekce implementující rozhraníIterable.// Příklad iterace přes 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žití
Iterator:
Flexibilnější způsob, umožňuje odstraňování prvků během iterace. Vhodné pro všechny kolekce.// Příklad iterace 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); // Bezpečné odstraňování prvků // if (element.equals("B")) { // iterator.remove(); // } } -
Použití
ListIterator(pro seznamy):
Specializovaný iterator pro kolekce implementující rozhraníList. Umožňuje pohyb dopředu i dozadu, přidávání a měnění prvků.// Příklad iterace 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); } // Příklad iterace zpět while (listIterator.hasPrevious()) { String element = listIterator.previous(); System.out.println(element); } -
Streams API (od Java 8):
Funkcionální přístup s použitím lambda výrazů. Umožňuje provádět operace nad prvky kolekce (filtrace, transformace atd.) deklarativním stylem. Iterace probíhá "vnitřně" v rámci proudu.// Příklad iterace 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)); // Příklad s filtrováním a transformací // list.stream() // .filter(element -> element.startsWith("A")) // .map(String::toLowerCase) // .forEach(System.out::println);
Volba vhodného způsobu závisí na konkrétním úkolu, typu kolekce a požadovaném výkonu. U většiny případů je nejpohodlnější rozšířený for cyklus. Pokud je potřeba odstraňovat prvky během iterace, je vhodnější použít Iterator. Pro seznamy, kde je potřeba obousměrná iterace, je vhodný ListIterator. Streams API nabízí mocné možnosti pro zpracování dat deklarativním stylem.