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 |
---|---|---|
|
|
Elenco |
|
Lista collegata | |
|
Vettore | |
|
Pila | |
|
|
Impostato |
|
||
|
||
|
|
Coda |
|
||
|
|
Mappa/Dizionario |
|
||
|
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' Collection
interfaccia, mentre altre no.
Di conseguenza, le raccolte sono suddivise in raccolte in senso lato e raccolte in senso stretto (solo quelle che implementano l' Collection
interfaccia).
Quindi, per evitare confusione, quando parliamo di collezioni intendiamo nel senso stretto del termine, cioè classi che implementano l' Collection
interfaccia. I tipi e List
sono tutte raccolte. Le raccolte in senso lato sono generalmente chiamate contenitori . Questi includono tipi come e array.Set
Queue
Map
2. HashSet
raccolta
La HashSet
classe è una tipica raccolta di set. In molti modi, è simile alla ArrayList
classe. In un certo senso, è una versione più primitiva.
Puoi creare un HashSet
oggetto usando un'istruzione come:
HashSet<Type> name = new HashSet<Type>();
Dov'è Type
il tipo di elementi che memorizzeremo nella HashSet
raccolta.
La HashSet
classe ha metodi come questo:
Metodo | Descrizione |
---|---|
|
Aggiunge l' value elemento alla raccolta |
|
Rimuove l' value elemento dalla raccolta. Restituisce true se c'era un tale elemento |
|
Controlla se la raccolta ha un value elemento |
|
Cancella la raccolta, rimuovendo tutti gli elementi |
|
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 |
---|---|
|
Creare un HashSet oggetto che memorizzi String elementi. Aggiungiamo saluti in varie lingue alla set variabile. Leggi una riga dalla console. Se la stringa è nel nostro set di saluti, allora ci salutiamo. |
3. Impostare
La Set
collezione è 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: List
vsSet
Confrontiamo due tipi di raccolta: List
e Set
Vedremo le principali differenze, quando uno è più vantaggioso dell'altro e viceversa.
Proviamo a confrontare List e Set usando i giocattoli come esempio.
La List
collezione (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 Set
collezione (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 Set
collezione. La sua implementazione più popolare è la HashSet
classe.