La lista Java è una raccolta ordinata. La lista Java è un’interfaccia che estende l’interfaccia Collection. La lista Java fornisce il controllo sulla posizione in cui è possibile inserire un elemento. È possibile accedere agli elementi tramite il loro indice e cercare anche gli elementi nella lista.
Lista Java
Alcuni dei punti importanti sulla lista Java sono;
- L’interfaccia Lista Java è un membro del Framework delle Collezioni Java.
- La lista consente di aggiungere elementi duplicati.
- La lista consente di avere elementi ‘null’.
- L’interfaccia Lista ha molti metodi predefiniti in Java 8, ad esempio replaceAll, sort e spliterator.
- Gli indici della lista partono da 0, proprio come gli array.
- La lista supporta i Generics e dovremmo utilizzarli sempre quando possibile. Utilizzare i Generics con la Lista eviterà ClassCastException durante l’esecuzione.
Diagramma delle classi Lista Java
L’interfaccia List di Java estende l’interfaccia Collection. L’interfaccia Collection estende l’interfaccia Iterable. Alcune delle classi di implementazione della lista più utilizzate sono ArrayList, LinkedList, Vector, Stack, CopyOnWriteArrayList. AbstractList fornisce un’implementazione scheletrica dell’interfaccia List per ridurre lo sforzo nell’implementazione della lista.
Metodi della Lista Java
Alcuni dei metodi utili della lista Java sono;
- int size(): per ottenere il numero di elementi nella lista.
- boolean isEmpty(): per controllare se la lista è vuota o meno.
- boolean contains(Object o): Restituisce true se questa lista contiene l’elemento specificato.
- Iterator<E> iterator(): Restituisce un iteratore sugli elementi di questa lista nella sequenza corretta.
- Object[] toArray(): Restituisce un array contenente tutti gli elementi di questa lista nella sequenza corretta
- boolean add(E e): Aggiunge l’elemento specificato alla fine di questa lista.
- boolean remove(Object o): Rimuove la prima occorrenza dell’elemento specificato da questa lista.
- boolean retainAll(Collection >): Conserva solo gli elementi di questa lista che sono contenuti nella collezione specificata.
- void clear(): Rimuove tutti gli elementi dalla lista.
- E get(int index): Returns the element at the specified position in the list.
- E set(int index, E element): Replaces the element at the specified position in the list with the specified element.
- ListIterator
listIterator() : Restituisce un iteratore di lista sugli elementi nella lista. - List
subList(int fromIndex, int toIndex) : Restituisce una vista della porzione di questa lista tra il fromIndex specificato, inclusivo, e il toIndex specificato, esclusivo. La lista restituita è supportata da questa lista, quindi le modifiche non strutturali nella lista restituita si riflettono in questa lista, e viceversa.
Alcuni dei metodi predefiniti aggiunti a List in Java 8 sono;
- default void replaceAll(UnaryOperator
operator) : Sostituisce ciascun elemento di questa lista con il risultato dell’applicazione dell’operatore a quell’elemento. - default void sort(Comparator super E> c): Ordina questa lista secondo l’ordine indotto dal Comparator specificato.
- default Spliterator
spliterator() : Crea un Spliterator sugli elementi in questa lista.
Java Array to List
Possiamo usare la classe Arrays per ottenere la vista dell’array come lista. Tuttavia, non saremo in grado di apportare alcuna modifica strutturale alla lista; ciò genererà java.lang.UnsupportedOperationException. Quindi, il modo migliore è utilizzare un ciclo for per creare la lista iterando sull’array. Di seguito è riportato un semplice esempio che mostra come convertire correttamente un array Java in una lista.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayToList {
public static void main(String[] args) {
String[] vowels = {"a","e","i","o","u"};
List vowelsList = Arrays.asList(vowels);
System.out.println(vowelsList);
/**
* List is backed by array, we can't do structural modification
* Both of the below statements will throw java.lang.UnsupportedOperationException
*/
//vowelsList.remove("e");
//vowelsList.clear();
//utilizzo del ciclo for per copiare gli elementi dall'array alla lista, sicuro per la modifica della lista
List myList = new ArrayList<>();
for(String s : vowels){
myList.add(s);
}
System.out.println(myList);
myList.clear();
}
}
Scegliere uno dei metodi sopra in base ai requisiti del progetto.
Lista Java in Array
A simple example showing the correct way to convert a list to array.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListToArray {
public static void main(String[] args) {
List letters = new ArrayList();
// aggiungi esempio
letters.add("A");
letters.add("B");
letters.add("C");
//converti lista in array
String[] strArray = new String[letters.size()];
strArray = letters.toArray(strArray);
System.out.println(Arrays.toString(strArray)); //will print "[A, B, C]"
}
}
Ordinamento Lista Java
Ci sono due modi per ordinare una lista. Possiamo utilizzare la classe Collections per l’ordinamento naturale oppure possiamo utilizzare il metodo sort() della lista e utilizzare il nostro Comparator per l’ordinamento. Di seguito è riportato un semplice esempio di ordinamento di una lista Java.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class ListSortExample {
public static void main(String[] args) {
List ints = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 10; i++) ints.add(random.nextInt(1000));
//ordinamento naturale utilizzando la classe Collections
Collections.sort(ints);
System.out.println("Natural Sorting: "+ints);
//Mio ordinamento personalizzato, ordine inverso
ints.sort((o1,o2) -> {return (o2-o1);});
System.out.println("Reverse Sorting: "+ints);
}
}
A sample output is given below. Since I am using Random for generating list elements, it will be different every time.
Natural Sorting: [119, 273, 388, 450, 519, 672, 687, 801, 812, 939]
Reverse Sorting: [939, 812, 801, 687, 672, 519, 450, 388, 273, 119]
Operazioni Comuni sulla Lista Java
Le operazioni più comuni eseguite sulla lista Java sono aggiunta, rimozione, impostazione, cancellazione, dimensione, ecc. Di seguito è riportato un semplice esempio di lista Java che mostra l’uso dei metodi comuni.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListExample {
public static void main(String args[]) {
List vowels= new ArrayList();
//esempio di aggiunta
vowels.add("A");
vowels.add("I");
//inseriamo E tra A e I
vowels.add(1,"E");
System.out.println(vowels);
List list = new ArrayList();
list.add("O");list.add("U");
//aggiungiamo gli elementi della lista alle lettere
vowels.addAll(list);
System.out.println(vowels);
//esempio di cancellazione per svuotare la lista
list.clear();
//esempio di dimensione
System.out.println("letters list size = "+vowels.size());
//esempio di impostazione
vowels.set(2, "E");
System.out.println(vowels);
//esempio di sottolista
vowels.clear();vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
list = vowels.subList(0, 2);
System.out.println("letters = "+vowels+", list = "+list);
vowels.set(0, "A");
System.out.println("letters = "+vowels+", list = "+list);
list.add("U");
System.out.println("letters = "+vowels+", list = "+list);
}
}
Output del programma di esempio di lista Java sopra è;
[A, E, I]
[A, E, I, O, U]
letters list size = 5
[A, E, E, O, U]
letters = [E, E, I, O], list = [E, E]
letters = [A, E, I, O], list = [A, E]
letters = [A, E, U, I, O], list = [A, E, U]
Iteratore di lista Java
Di seguito è riportato un semplice esempio che mostra come iterare sulla lista in Java.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListIteratorExample {
public static void main(String[] args) {
List list = new ArrayList<>();
for(int i=0; i<5; i++) list.add(i);
Iterator iterator = list.iterator();
//iterazione semplice
while(iterator.hasNext()){
int i = (int) iterator.next();
System.out.print(i + ", ");
}
System.out.println("\n"+list);
//modifica della lista utilizzando l'iteratore
iterator = list.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next();
if(x%2 ==0) iterator.remove();
}
System.out.println(list);
//cambiamento della struttura della lista durante l'iterazione
iterator = list.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next(); //ConcurrentModificationException here
if(x==1) list.add(10);
}
}
}
Output del programma di iteratore di lista Java sopra è;
0, 1, 2, 3, 4,
[0, 1, 2, 3, 4]
[1, 3]
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.journaldev.examples.ListIteratorExample.main(ListIteratorExample.java:34)
Ecco tutto un rapido riepilogo su List in Java. Spero che questi esempi di List in Java ti aiutino ad iniziare con la programmazione di collezioni di liste.
Source:
https://www.digitalocean.com/community/tutorials/java-list