Koji su načini iteracije kroz kolekcije u Javi?
sobes.tech АИ
Одговор од АИ
Postoji nekoliko načina za iteraciju kroz kolekcije u Javi:
-
forpetlja sa indeksom (za kolekcije koje podržavaju pristup putem indeksa, na primerArrayList,LinkedList):
Pogodno za kolekcije gde je pristup elementima putem indeksa efikasan.// Primer iteracije kroz 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); } -
Proširena
forpetlja (Enhanced for loop / for-each loop):
Najčešći i najzgodniji način. Pogodno za bilo koje kolekcije koje implementiraju interfejsIterable.// Primer iteracije kroz ArrayList sa for-each ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); for (String element : list) { System.out.println(element); } -
Korišćenje
Iterator-a:
Fleksibilniji način, omogućava brisanje elemenata tokom iteracije. Pogodno za sve kolekcije.// Primer iteracije sa `Iterator`-om 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); // Može se sigurno brisati elemente // if (element.equals("B")) { // iterator.remove(); // } } -
Korišćenje
ListIterator(za liste):
Specijalizovani iterator za kolekcije koje implementiraju interfejsList. Omogućava kretanje napred i nazad, kao i dodavanje i menjanje elemenata.// Primer iteracije sa `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); } // Primer iteracije unazad while (listIterator.hasPrevious()) { String element = listIterator.previous(); System.out.println(element); } -
Streams API (od Java 8):
Funkcionalni pristup sa korišćenjem lambda izraza. Omogućava izvođenje operacija nad elementima kolekcije (filtriranje, transformacija itd.) na deklarativni način. Iteracija se dešava "unutra" u okviru toka.// Primer iteracije sa Streams API ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.stream() .forEach(element -> System.out.println(element)); // Primer sa filtracijom i transformacijom // list.stream() // .filter(element -> element.startsWith("A")) // .map(String::toLowerCase) // .forEach(System.out::println);
Izbor odgovarajućeg načina zavisi od konkretne zadatka, tipa kolekcije i zahteva za performanse. Za većinu slučajeva najzgodniji je prošireni for petlja. Ako je potrebno brisanje elemenata tokom iteracije, preporučuje se Iterator. Za liste gde je potrebna dvostrana iteracija, odgovara ListIterator. Streams API pruža moćne mogućnosti za obradu podataka na deklarativni način.