1. Contenitori e collezioni

I contenitori o le raccolte sono classi che consentono di archiviare ed elaborare più oggetti contemporaneamente. Conosci già due tipi di contenitori: array ed elenchi.

Java ha diverse dozzine di raccolte, ognuna delle quali memorizza gli elementi in un modo specifico. Eccone alcuni:

Collezione Classe Descrizione
List
ArrayList
Elenco
LinkedList
Lista collegata
Vector
Vettore
Stack
Pila
Set
HashSet
Impostato
TreeSet
LinkedHashSet
Queue
PriorityQueue
Coda
ArrayQueue
Map
HashMap
Mappa/Dizionario
TreeMap
HashTable

I nomi sono alquanto ambigui qui. Nella maggior parte dei linguaggi di programmazione, tutte queste strutture di dati sono chiamate raccolte, ma non in Java. In Java, alcune di queste classi implementano l' Collectioninterfaccia, mentre altre no.

Di conseguenza, le raccolte sono suddivise in raccolte in senso lato e raccolte in senso stretto (solo quelle che implementano l' Collectioninterfaccia).

Quindi, per evitare confusione, quando parliamo di collezioni intendiamo nel senso stretto del termine, cioè classi che implementano l' Collectioninterfaccia. I tipi e Listsono tutte raccolte. Le raccolte in senso lato sono generalmente chiamate contenitori . Questi includono tipi come e array.SetQueueMap


2. HashSetraccolta

La HashSetclasse è una tipica raccolta di set. In molti modi, è simile alla ArrayListclasse. In un certo senso, è una versione più primitiva.

Puoi creare un HashSetoggetto usando un'istruzione come:

HashSet<Type> name = new HashSet<Type>();

Dov'è Typeil tipo di elementi che memorizzeremo nella HashSetraccolta.

La HashSetclasse ha metodi come questo:

Metodo Descrizione
void add(Type value)
Aggiunge l' valueelemento alla raccolta
boolean remove(Type value)
Rimuove l' valueelemento dalla raccolta.
Restituisce truese c'era un tale elemento
boolean contains(Type value)
Controlla se la raccolta ha un valueelemento
void clear()
Cancella la raccolta, rimuovendo tutti gli elementi
int size()
Restituisce il numero di elementi nella raccolta

Ecco un esempio di utilizzo di un set.

Scriviamo un programma che saluti l'utente se lo saluta. Per renderlo più interessante, daremo al nostro programma la capacità di capire "ciao" in diverse lingue.

Codice Nota
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
Creare un HashSetoggetto che memorizzi Stringelementi.


Aggiungiamo saluti in varie lingue alla setvariabile.




Leggi una riga dalla console.


Se la stringa è nel nostro set di saluti, allora ci salutiamo.


3. Impostare

La Setcollezione è pensata per contenere un insieme di elementi. Ecco perché si chiama un Set(insieme). Questa collezione ha tre caratteristiche.

Operazioni su un insieme

Ci sono solo tre cose che puoi fare con un set: aggiungere elementi al set, rimuovere elementi dal set e controllare se il set contiene un elemento specifico. Questo è tutto.

Nessun ordine

Gli elementi in questa raccolta non hanno indici. Non è possibile ottenere un elemento da un indice o scrivere un valore in una raccolta in un indice specifico. Un insieme non ha metodi get()e set().

Elementi unici

Tutti gli elementi di un set sono unici. A differenza di un elenco, un set può contenere solo un'istanza di un elemento. Un oggetto è nel set oppure no: non esiste una terza opzione. Non puoi aggiungere il nero tre volte a un insieme di colori. O c'è o non c'è.

Trovare elementi

Quando aggiungi un nuovo elemento, rimuovi un elemento o controlli se un elemento esiste in un set, viene eseguita una ricerca dell'elemento nel metodo. L'elemento passato viene confrontato con gli elementi della raccolta prima da hashCode()e poi, se i valori restituiti da hashCode()corrispondono, da equals().



4. Collezioni a confronto: ListvsSet

Confrontiamo due tipi di raccolta: Liste SetVedremo le principali differenze, quando uno è più vantaggioso dell'altro e viceversa.

Proviamo a confrontare List e Set usando i giocattoli come esempio.

La Listcollezione (lista) è come una serie di giocattoli disposti lungo il muro in una stanza dei giochi. Puoi aggiungere un giocattolo alla fine dell'elenco. Se proprio ne hai bisogno, puoi anche inserirlo nel mezzo (ma alcuni dei giocattoli esistenti dovranno essere spostati).

Ogni giocattolo ha un indice. Puoi fare riferimento a un giocattolo tramite il suo indice e anche sostituire il giocattolo numero 7 con il giocattolo numero 13. Puoi rimuovere il giocattolo numero 4 dall'elenco. Infine, puoi imparare l'indice di ogni giocattolo nell'elenco.

La Setcollezione (set) è più simile a una pila di giocattoli in mezzo al pavimento. Puoi aggiungere un giocattolo alla pila e puoi rimuovere un giocattolo dalla pila. Ma a questi giocattoli non è associato un indice fisso.

Oppure supponi di scegliere un giocattolo per il compleanno di tuo figlio. Per prima cosa, pensi se ha già il giocattolo. Tutti i giocattoli che ha già formano un set di giocattoli che non sceglierai di acquistare.

Da questo punto di vista, puoi vedere che l'ordine dei giocattoli in un set di "giocattoli già esistenti" non ha importanza, né importa se il festeggiato ha due istanze di un particolare giocattolo. Non sei interessato all'ordine o al numero di ciascun giocattolo. Quello che ti interessa è conoscere ogni giocattolo unico che esiste nel set.

Per casi come questo, hai bisogno della Setcollezione. La sua implementazione più popolare è la HashSetclasse.