Les llistes en Java ens permeten mantenir una col·lecció ordenada d'objectes. Els elements duplicats i els elements nuls també es poden emmagatzemar en una llista a Java. La interfície de llista forma part de java.util paquet i hereta la interfície Col·lecció. Conserva l'ordre d'inserció.
Hi ha diverses maneres d'iterar sobre List a Java. Es comenten a continuació:
Mètodes:
- Ús de bucles (enfocament ingenu)
- Utilitzant Iterador
- Utilitzant Iterador de llista
- Utilitzant l'expressió lambda
- Utilitzant stream.forEach()
- Ús de Spliterator (Java 8 i posterior)
Mètode 1-A: bucle for simple
Es pot accedir a cada element per iteració mitjançant un bucle for simple. Es pot accedir a l'índex utilitzant l'índex com a variable de bucle.
Sintaxi:
for (i = 0; i>
A continuació es mostra un exemple d'aquest mètode:
Java
// Java Program to iterate over List // Using simple for loop // Importing all classes of // java.util package import java.util.*; // CLass class GFG { // Main driver method public static void main(String args[]) { // Creating a ArrayList ListmyList = nova ArrayList(); // Afegeix elements a la llista // Entrades personalitzades myList.add('A'); myList.add('B'); myList.add('C'); myList.add('D'); // For bucle per iterar sobre la llista for (int i = 0; i< myList.size(); i++) { // Print all elements of List System.out.println(myList.get(i)); } } }> Sortida
A B C D>
Complexitat del mètode anterior:
Complexitat temporal: O(n), on 'n' és la mida de la llista.
Espai auxiliar: O(1), l'espai constant s'utilitza per a les variables de bucle (i en aquest cas).
Mètode 1-B: millorat per bucle
Es pot accedir a cada element per iteració mitjançant un bucle for millorat. Aquest bucle es va introduir a J2SE 5.0. És un enfocament alternatiu per recórrer el bucle for. Fa que el codi sigui més llegible.
Sintaxi:
for(data_type variable : List_name) { // Body of the loop. // Each element can be accessed using variable. }>A continuació es mostra l'exemple d'aquest mètode:
Java // Java Program to Iterate over a List // using enhanced for loop (for-each) // Importing all classes of // java.util package import java.util.*; // Class class GFG { // Main driver method public static void main(String args[]) { // Creating an Arraylist ListmyList = nova ArrayList(); // Afegeix elements a la llista // Entrades personalitzades myList.add('A'); myList.add('B'); myList.add('C'); myList.add('D'); // S'utilitza el bucle for millorat (for-each) per a la iteració de (String i : myList) { // Imprimeix tots els elements de ArrayList System.out.println(i); } } }>> Sortida
A B C D>
Complexitat del mètode anterior:
Complexitat temporal: O(n), on 'n' és la mida de la llista.
Espai auxiliar: O(1), l'espai constant s'utilitza per a les variables de bucle (i en aquest cas).
Mètode 1-C: utilitzant un bucle while
La iteració d'una llista també es pot aconseguir mitjançant un bucle while. El bloc de codi dins del bucle s'executa fins que la condició és certa. Es pot utilitzar una variable de bucle com a un índex per accedir a cada element.
Sintaxi:
while(variable>
A continuació es mostra l'exemple d'aquest mètode:
Java // Java Program to iterate over a List // using while loop // Importing all classes of // java.util package import java.util.*; // Class class GFG { // Main driver method public static void main(String args[]) { // Creating an ArrayList ListmyList = nova ArrayList(); // Afegeix elements a la llista // Entrades personalitzades myList.add('A'); myList.add('B'); myList.add('C'); myList.add('D'); // Inicialitza qualsevol variable a 0 int i = 0; // Si el valor de la variable és menor que // el valor que indica la mida de la llista mentre (i< myList.size()) { // Print element of list System.out.println(myList.get(i)); // Increase variable count by 1 i++; } } }> Sortida
A B C D>
Complexitat del mètode anterior:
Complexitat temporal: O(n), on 'n' és la mida de la llista.
Espai Auxiliar : O(1), l'espai constant s'utilitza per a les variables de bucle (i en aquest cas).
Mètode 2: Ús de l'iterador
Un iterador és un objecte en Java que permet iterar sobre elements d'una col·lecció. Es pot accedir a cada element de la llista mitjançant un iterador amb un bucle while.
Sintaxi:
Iterator variable = list_name.iterator();>
A continuació es mostra l'exemple d'aquest mètode:
Java // Java Program to iterate over the list // using iterator // Importing all classes of // java.util package import java.util.*; // Class class GFG { // Main driver method public static void main(String args[]) { // Creating an ArrayList ListmyList = nova ArrayList(); // Afegeix elements a la llista // Entrades personalitzades myList.add('A'); myList.add('B'); myList.add('C'); myList.add('D'); // Iterador Iteradorit = myList.iterator(); // Comprovació de la condició d'elements a la llista // utilitzant el mètode hasNext() que retorna cert fins que // hi ha un sol element en una llista mentre (it.hasNext()) { // Imprimeix tots els elements de la llista System.out.println(it .Pròxim()); } } }>> Sortida
A B C D>
Complexitat del mètode anterior:
Complexitat temporal: O(n), on 'n' és la mida de la llista.
Espai auxiliar: O(1), l'espai constant s'utilitza per a les variables de bucle (i en aquest cas).
Mètode 3: Ús de l'iterador de llista
ListIterator és un iterador en Java que està disponible des de la versió 1.2. Ens permet iterar elements un per un d'un objecte implementat List. S'utilitza per iterar sobre una llista utilitzant el bucle while.
Sintaxi:
ListIterator variable = list_name.listIterator();>
A continuació es mostra l'exemple d'aquest mètode:
Java // Java program to iterate over a list // using ListIterator import java.util.*; // Class class GFG { // Main driver method public static void main(String args[]) { // Creating an ArrayList ListmyList = nova ArrayList(); // Afegeix elements a la llista // Entrades personalitzades myList.add('A'); myList.add('B'); myList.add('C'); myList.add('D'); // Iterador de llista Iterador de llistait = myList.listIterator(); // Comprovació de la condició si hi ha un element a la llista // utilitzant hasNext() que és cert fins que // hi ha un sol element a la llista mentre (it.hasNext()) { // Imprimeix tots els elements de la llista System.out.println( it.next()); } } }>>>
Sortida A B C D>
Complexitat del mètode anterior:
Complexitat temporal: O(n), on 'n' és la mida de la llista.
Espai auxiliar: O(1), l'espai constant s'utilitza per a les variables de bucle (i en aquest cas).
Mètode 4: utilitzant Iterable.forEach()
Aquesta característica està disponible des de Java 8. També es pot utilitzar per iterar sobre una llista. La iteració es pot fer utilitzant a expressió lambda.
Sintaxi:
// Java Program to iterate over a List // using forEach() // Importing all classes of // java.util method import java.util.*; // Class class GFG { // Main driver method public static void main(String args[]) { // Creating an ArrayList ListmyList = nova ArrayList(); // Afegeix elements a la llista // Entrades personalitzades myList.add('A'); myList.add('B'); myList.add('C'); myList.add('D'); // Expressió lambda que imprimeix tots els elements d'una llista myList.forEach((temp) -> { System.out.println(temp); }); } }>>> Sortida
A B C D>
Complexitat del mètode anterior:
Complexitat temporal: O(n), on 'n' és la mida de la llista.
Espai auxiliar: O(1), l'espai constant s'utilitza per a les variables de bucle (i en aquest cas).
Mètode 5: utilitzant Stream.forEach()
L'ordre de processament de stream().forEach() no està definit mentre que en el cas de forEach(), està definit. Tots dos es poden utilitzar per iterar sobre una llista.
Sintaxi:
canviar el nom del directori de Linux
// Java Program iterating over a List // using stream.forEach() method // Importing all classes of // java.util method import java.util.*; // Class class GFG { // Main driver method public static void main(String args[]) { // Creating an ArrayList ListmyList = nova ArrayList(); // Afegeix elements a la llista // Entrades personalitzades myList.add('A'); myList.add('B'); myList.add('C'); myList.add('D'); // El mètode stream.forEach() imprimeix // tots els elements dins d'una llista myList.stream().forEach((temp) -> System.out.println(temp)); } }>>> Sortida
A B C D>
Complexitat del mètode anterior:
Complexitat temporal: O(n), on 'n' és la mida de la llista.
Espai auxiliar: O(1), l'espai constant s'utilitza per a les variables de bucle (i en aquest cas).
Mètodes 6: Ús de Spliterator (Java 8 i posterior)
Java 8 va presentar el Divisor interfície, que significa iterador dividit. Proporciona una manera d'iterar sobre elements d'una manera més paral·lela. Es pot obtenir un Spliterator de diverses fonts, incloses col·leccions com llistes. El mètode forEachRemaining de Spliterator s'utilitza per recórrer tots els elements restants seqüencialment.
Sintaxi:
// Java Program iterating over a List // using Spliterator import java.util.List; import java.util.Spliterator; public class ListIteration { public static void main(String[] args) { // List of String ListmyList = List.of('A', 'B', 'C','D'); // Utilitzant Spliterator Spliteratorspliterator = myList.spliterator(); spliterator.forEachRemaining(System.out::println); } }>>> Sortida
Complexitat temporal: O(n), on 'n' és la mida de la llista.
Espai auxiliar: O(log n) o O(1), (segons les característiques de la implementació de Spliterator)