Java List – Lista in Java

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;

  1. int size(): per ottenere il numero di elementi nella lista.
  2. boolean isEmpty(): per controllare se la lista è vuota o meno.
  3. boolean contains(Object o): Restituisce true se questa lista contiene l’elemento specificato.
  4. Iterator<E> iterator(): Restituisce un iteratore sugli elementi di questa lista nella sequenza corretta.
  5. Object[] toArray(): Restituisce un array contenente tutti gli elementi di questa lista nella sequenza corretta
  6. boolean add(E e): Aggiunge l’elemento specificato alla fine di questa lista.
  7. boolean remove(Object o): Rimuove la prima occorrenza dell’elemento specificato da questa lista.
  8. boolean retainAll(Collection): Conserva solo gli elementi di questa lista che sono contenuti nella collezione specificata.
  9. void clear(): Rimuove tutti gli elementi dalla lista.
  10. E get(int index): Returns the element at the specified position in the list.
  11. E set(int index, E element): Replaces the element at the specified position in the list with the specified element.
  12. ListIterator listIterator(): Restituisce un iteratore di lista sugli elementi nella lista.
  13. 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;

  1. default void replaceAll(UnaryOperator operator): Sostituisce ciascun elemento di questa lista con il risultato dell’applicazione dell’operatore a quell’elemento.
  2. default void sort(Comparator c): Ordina questa lista secondo l’ordine indotto dal Comparator specificato.
  3. 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