Kokie yra būdai iteruoti per kolekcijas Java kalboje?
sobes.tech AI
Atsakymas iš AI
Java kalboje yra keletas būdų iteruoti per kolekcijas:
-
forciklas su indeksu (tinka kolekcijoms, kurios palaiko indeksinę prieigą, pvz.,ArrayList,LinkedList):
Tinka kolekcijoms, kuriose indeksinė prieiga yra efektyvi.// Pavyzdys iteracijos per 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); } -
Patobulintas
forciklas (Enhanced for loop / for-each loop):
Labiausiai paplitęs ir patogus būdas daugeliu atvejų. Tinka bet kokioms kolekcijoms, kurios įgyvendinaIterablesąsają.// Pavyzdys iteracijos per ArrayList naudojant for-each ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); for (String element : list) { System.out.println(element); } -
Iteratornaudojimas:
Lankstesnis būdas, leidžiantis šalinti elementus iteracijos metu. Tinka visoms kolekcijoms.// Pavyzdys naudojant 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); // Saugiai galima šalinti elementus // if (element.equals("B")) { // iterator.remove(); // } } -
ListIteratornaudojimas (sąrašams):
Specializuotas iteratorius, skirtasListsąsajai įgyvendinti. Leidžia judėti į priekį ir atgal, taip pat pridėti ir keisti elementus.// Pavyzdys naudojant 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); } // Judėjimas atgal while (listIterator.hasPrevious()) { String element = listIterator.previous(); System.out.println(element); } -
Streams API (nuo Java 8):
Funkcinis požiūris naudojant lambda išraiškas. Leidžia atlikti operacijas su kolekcijos elementais (filtravimas, transformavimas ir kt.) deklaratyviu stiliumi. Iteracija vyksta "viduje" srauto.// Pavyzdys naudojant Streams API ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.stream() .forEach(element -> System.out.println(element)); // Filtravimo ir transformavimo pavyzdys // list.stream() // .filter(element -> element.startsWith("A")) // .map(String::toLowerCase) // .forEach(System.out::println);
Pasirinktas būdas priklauso nuo konkrečios užduoties, kolekcijos tipo ir reikalaujamos našumo. Daugeliu atvejų patogiausias yra patobulintas for ciklas. Jei reikia šalinti elementus iteracijos metu, naudokite Iterator. Sąrašams, kuriuose reikalingas dviejų krypčių iteravimas, tinka ListIterator. Streams API siūlo galingas galimybes duomenų apdorojimui deklaratyviu stiliumi.