introduzione

Quasi tutti i programmi devono memorizzare una serie di dati. Può essere stringhe e numeri, oggetti e così via. Gli array sono un'eccellente soluzione di archiviazione. Ma gli array hanno alcune limitazioni. Ad esempio, la loro dimensione è fissa, gli elementi non possono essere rimossi e non è possibile inserire elementi nel mezzo. Le raccolte sono state create per aggirare queste e altre limitazioni. Tutti i tipi di raccolte (e ce ne sono molte, come vedremo più avanti in questa lezione) hanno la capacità di ridimensionarsi dinamicamente. Alcuni tipi di raccolta possono memorizzare elementi ordinati e mettere automaticamente in ordine i nuovi elementi man mano che vengono aggiunti.

In questa lezione impareremo a conoscere la gerarchia delle classi delle raccolte di base nel Java Collections Framework . Esistono anche varie librerie alternative che estendono le capacità del Java Collections Framework standard . Il più popolare di questi è Guava (Google Collections Library).

*Non tutte le interfacce e le classi sono rappresentate nel diagramma. Alcuni sono stati omessi per facilitare la comprensione.

Interfacce di base

Il diagramma mostra che esistono due interfacce di base implementate per formare il resto delle classi e delle interfacce.

Diamo un'occhiata a queste interfacce:

  1. Collection — Una raccolta ordinaria che contiene un insieme di elementi (oggetti). Questa raccolta ha metodi di base per lavorare con gli elementi: inserisci ( add , addAll ), rimuovi ( remove , removeAll , clear ), cerca ( contains , containsAll ), controlla se la raccolta è vuota ( isEmpty ) e ottieni size ( size ).

  2. Mappa : una raccolta strutturata come coppie chiave-valore. Inoltre, ogni chiave in una mappa è unica: non esistono due chiavi con valori identici. Questa raccolta è talvolta chiamata dizionario . La mappa è un'interfaccia separata. Non implementa l' interfaccia Collection , ma fa parte del Java Collections Framework .

Metodi utili per lavorare con gli elementi in una mappa :

  • inserisci ( metti , mettiTutto )

  • get ( get , keySet , valori , entrySet )

  • rimuovere ( rimuovere , cancellare )

  • ricerca ( contieneChiave , contieneValore )

  • controlla se la raccolta è vuota ( isEmpty )

  • ottieni la taglia ( taglia )

Ora parliamo di più su ciascuno di essi.

Interfaccia di raccolta

L' interfaccia Collection estende l' interfaccia Iterable , che ha un solo metodo: iterator() . Per noi, questo significa che qualsiasi raccolta che eredita Iterable sarà in grado di restituire un iteratore.

Un iteratore è un oggetto speciale che puoi utilizzare per accedere agli elementi di qualsiasi raccolta, indipendentemente dalla sua specifica implementazione.

La figura mostra che 3 interfacce ereditano l' interfaccia Collection : List , Queue e Set . Ora esamineremo brevemente ciascuno di essi.

List è una raccolta ordinata che consente valori duplicati. Una particolarità di una Lista è che i suoi elementi sono numerati e sono accessibili per numero (indice).

Una coda memorizza gli elementi nell'ordine in cui sono stati aggiunti alla coda.

A differenza di un elenco, un Set rappresenta una raccolta non ordinata che non consente elementi ripetuti. L' interfaccia Set corrisponde al concetto di insieme matematico .

Implementazioni dell'interfaccia Mappa

Possiamo vedere che l' interfaccia Map rappresenta una mappatura tra chiavi e valori univoci.


interface Map<K, V>

dove K è il tipo delle chiavi e V è il tipo dei valori memorizzati.

Usando una chiave, possiamo estrarre i dati da una mappa . Per aggiungere un elemento a Map , dobbiamo specificare una chiave e un valore.

Diamo un'occhiata ad alcune implementazioni di Map :

  1. HashMap è un'implementazione di Map basata su tabelle hash. Può memorizzare chiavi e valori di qualsiasi tipo, incluso null . L'ordine degli elementi non è garantito.

  2. LinkedHashMap è una struttura dati che memorizza i dati come un elenco collegato di elementi. Gli elementi vengono visualizzati nell'elenco nell'ordine in cui sono stati aggiunti.

  3. TreeMap implementa l' interfaccia SortedMap (tramite l' interfaccia NavigableMap ). Gli elementi in questa struttura sono archiviati in ordine ordinato (quando viene aggiunto un nuovo elemento, la raccolta viene ordinata automaticamente). TreeMap è ottimo per archiviare grandi quantità di dati ordinati con un rapido recupero.

Collezioni obsolete:

Java ha raccolte obsolete rispetto alle versioni precedenti (per mantenere la compatibilità con le versioni precedenti). Queste vecchie raccolte non dovrebbero essere utilizzate nel nuovo codice:

  • Enumerazione — analoga all'interfaccia Iterator ;

  • Vector — un elenco ordinato di elementi e analogo alla classe ArrayList ;

  • Stack : un'implementazione della struttura dei dati dello stack, che memorizza e manipola elementi come il modo in cui interagiresti con una pila di libri. Esistono metodi per aggiungere elementi allo stack ( push ) e toglierli ( pop );

  • Dizionario — analogo all'interfaccia Mappa , ma è una classe astratta;

  • Hashtable — analogo a HashMap .

Puoi leggere ulteriori informazioni sul framework delle raccolte in questo articolo .