Care sunt modalitățile de a itera peste colecții în Java?
sobes.tech AI
Răspuns de la AI
În Java, există mai multe moduri de a itera peste colecții:
-
Buclă
forcu index (pentru colecții care suportă accesul pe bază de index, cum ar fiArrayList,LinkedList):
Potrivit pentru colecții în care accesul pe bază de index este eficient.// Exemplu de iterare pe 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); } -
Buclă
forextinsă (Enhanced for loop / for-each):
Cel mai comun și convenabil mod pentru majoritatea cazurilor. Potrivit pentru orice colecție care implementeazăIterable.// Exemplu de iterare pe ArrayList cu for-each ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); for (String element : list) { System.out.println(element); } -
Utilizarea iteratorului (
Iterator):
Mod mai flexibil care permite eliminarea elementelor în timpul iterării. Potrivit pentru toate colecțiile.// Exemplu de iterare cu 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); // Se pot elimina elemente în siguranță // if (element.equals("B")) { // iterator.remove(); // } } -
Utilizarea
ListIterator(pentru liste):
Iterator specializat pentru colecțiile care implementeazăList. Permite navigarea înainte și înapoi, precum și adăugarea și modificarea elementelor.// Exemplu de iterare cu 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); } // Exemplu de iterare înapoi while (listIterator.hasPrevious()) { String element = listIterator.previous(); System.out.println(element); } -
Streams API (din Java 8):
Abordare funcțională folosind expresii lambda. Permite efectuarea de operații asupra elementelor colecției (filtrare, transformare etc.) într-un mod declarativ. Iterarea are loc "intern" în flux.// Exemplu de iterare cu Streams API ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.stream() .forEach(element -> System.out.println(element)); // Exemplu cu filtrare și transformare // list.stream() // .filter(element -> element.startsWith("A")) // .map(String::toLowerCase) // .forEach(System.out::println);
Alegerea metodei depinde de sarcina specifică, tipul colecției și cerințele de performanță. Pentru cele mai multe cazuri, bucla for extinsă este cea mai convenabilă. Dacă este necesar să eliminați elemente în timpul iterării, trebuie utilizat Iterator. Pentru liste care necesită o iterare bidirecțională, este potrivit ListIterator. API-ul Streams oferă posibilități puternice pentru procesarea datelor într-un mod declarativ.