Interfaccia List in Java

Concetti Chiave
  • L'interfaccia List estende Collection e definisce il comportamento di una collezione che memorizza una sequenza di elementi.
  • Gli elementi possono essere inseriti o acceduti tramite la loro posizione nella lista, usando un indice basato su zero.
  • Una lista può contenere elementi duplicati e fornisce metodi specifici per la gestione degli indici.
  • I metodi principali includono add(), get(), remove(), indexOf(), lastIndexOf(), e subList().

L'interfaccia List

L'interfaccia List estende Collection e dichiara il comportamento di una collezione che memorizza una sequenza di elementi.

Gli elementi possono essere inseriti o acceduti tramite la loro posizione nella lista, usando un indice basato su zero. Una lista può contenere elementi duplicati.

List è un'interfaccia generica che ha questa dichiarazione:

interface List<E> extends Collection<E>

Qui, E specifica il tipo di oggetti che la lista conterrà.

Oltre ai metodi definiti da Collection, List definisce alcuni metodi propri, che sono riassunti nella Tabella sottostante:

Metodo Descrizione
void add(int indice, E ogg) Inserisce ogg nella lista invocante all'indice passato in indice. Tutti gli elementi preesistenti al punto di inserimento o oltre vengono spostati in alto. Quindi, nessun elemento viene sovrascritto.
boolean addAll(int indice, Collection<? extends E> c) Inserisce tutti gli elementi di c nella lista invocante all'indice passato in indice. Tutti gli elementi preesistenti al punto di inserimento o oltre vengono spostati in alto. Quindi, nessun elemento viene sovrascritto. Restituisce true se la lista invocante cambia e restituisce false altrimenti.
static List<E> copyOf(Collection<? extends E> sorgente) Restituisce una lista che contiene gli stessi elementi di quella specificata da sorgente. La lista restituita è non modificabile e basata su valori. I valori null non sono consentiti.
E get(int indice) Restituisce l'oggetto memorizzato all'indice specificato nella collezione invocante.
int indexOf(Object ogg) Restituisce l'indice della prima istanza di ogg nella lista invocante. Se ogg non è un elemento della lista, viene restituito –1.
int lastIndexOf(Object ogg) Restituisce l'indice dell'ultima istanza di ogg nella lista invocante. Se ogg non è un elemento della lista, viene restituito –1.
ListIterator<E> listIterator() Restituisce un iteratore all'inizio della lista invocante.
ListIterator<E> listIterator(int indice) Restituisce un iteratore alla lista invocante che inizia all'indice specificato.
static List<E> of(E... elementi) Crea una lista non modificabile basata su valori contenente gli elementi specificati in lista-parametri. Gli elementi null non sono consentiti. Sono fornite molte versioni sovraccaricate. Vedi la discussione nel testo per i dettagli.
E remove(int indice) Rimuove l'elemento alla posizione indice dalla lista invocante e restituisce l'elemento eliminato. La lista risultante viene compattata. Cioè, gli indici degli elementi successivi vengono decrementati di uno.
default void replaceAll(UnaryOperator<E> opDaApplicare) Aggiorna ogni elemento nella lista con il valore ottenuto dalla funzione opDaApplicare.
E set(int indice, E ogg) Assegna ogg alla posizione specificata da indice nella lista invocante. Restituisce il valore precedente.
default void sort(Comparator<? super E> comp) Ordina la lista usando il comparatore specificato da comp.
List<E> subList(int inizio, int fine) Restituisce una lista che include gli elementi da inizio a fine–1 nella lista invocante. Gli elementi nella lista restituita sono anche referenziati dall'oggetto invocante.
Tabella 1: I Metodi Dichiarati da List

Si noti che molti di questi metodi genereranno un'UnsupportedOperationException se la lista non può essere modificata, e una ClassCastException viene generata quando un oggetto è incompatibile con un altro, come quando si tenta di aggiungere un oggetto incompatibile a una lista.

Inoltre, molti metodi genereranno un'IndexOutOfBoundsException se viene usato un indice non valido. Una NullPointerException viene generata se si tenta di memorizzare un oggetto null e gli elementi null non sono consentiti nella lista. Un'IllegalArgumentException viene generata se viene usato un argomento non valido.

Alle versioni di add() e addAll() definite da Collection, List aggiunge i metodi add(int, E) e addAll(int, Collection). Questi metodi inseriscono elementi all'indice specificato. Inoltre, la semantica di add(E) e addAll(Collection) definiti da Collection viene modificata da List in modo che aggiungano elementi alla fine della lista. Si può modificare ogni elemento nella collezione usando replaceAll().

Per ottenere l'oggetto memorizzato in una posizione specifica, si può chiamare get() con l'indice dell'oggetto. Per assegnare un valore a un elemento nella lista, si può chiamare set(), specificando l'indice dell'oggetto da modificare. Per trovare l'indice di un oggetto, bisogna usare indexOf() o lastIndexOf().

Si può ottenere una sottolista di una lista chiamando subList(), specificando gli indici di inizio e fine della sottolista. Come si può immaginare, subList() rende l'elaborazione delle liste molto conveniente. Un modo per ordinare una lista è con il metodo sort() definito da List.

A partire da JDK 9, List include il metodo factory of(), che ha un numero di sovraccarichi. Ogni versione restituisce una collezione non modificabile, basata su valori che è composta dagli argomenti che le vengono passati. Lo scopo principale di of() è fornire un modo conveniente ed efficiente per creare una piccola collezione List. Ci sono 12 sovraccarichi di of(). Uno non prende argomenti e crea una lista vuota. È mostrato qui:

static <E> List<E> of()

Dieci sovraccarichi prendono da 1 a 10 argomenti e creano una lista che contiene gli elementi specificati. Sono mostrati qui:

static <E> List<E> of(E ogg1)
static <E> List<E> of(E ogg1, E ogg2)
static <E> List<E> of(E ogg, E ogg2, E ogg3)
...
static <E> List<E> of(E ogg1, E ogg2, E ogg3, E ogg4, E ogg5,
 E ogg6, E ogg7, E ogg8, E ogg9, E ogg10)

Il sovraccarico finale di of() specifica un parametro varargs che prende un numero arbitrario di elementi o un array di elementi. È mostrato qui:

static <E> List<E> of(E ... ogge)

Per tutte le versioni, gli elementi null non sono consentiti. In tutti i casi, l'implementazione di List non è specificata.