"E finalmente ti parlerò di Map."

"La mappa, come sai, memorizza un insieme di coppie chiave-valore. Le chiavi devono essere univoche, ma i valori possono essere qualsiasi cosa. Se aggiungi una coppia chiave-valore a una mappa e la raccolta contiene già la chiave, allora il vecchio valore verrà sostituito con quello nuovo. In altre parole, la chiave agisce come un indice speciale che può essere qualsiasi oggetto ."

Mappa è un termine matematico che denota un insieme di coppie (x, y), in cui ogni x univoco corrisponde a qualche y.

I programmatori amano molto Map, quindi qui presentiamo 4 diverse raccolte che implementano l'interfaccia Map:

"Ecco la sua semplice struttura ereditaria:"

Gerarchia della mappa - 1

"Il giallo indica che Entry è un'interfaccia nidificata nell'interfaccia Map ."

"È stata aggiunta una voce per descrivere una coppia di elementi come una singola entità."

"Ecco i metodi di Map<K,V>:"

Metodi Descrizione
int size() Restituisce il numero di coppie nella mappa.
boolean isEmpty() Controlla se la mappa è vuota.
boolean containsKey(Object key) La mappa contiene la chiave specificata?
boolean containsValue(Object value) La mappa contiene il valore specificato?
V get(Object key) Restituisce il valore per la chiave specificata.
V put(K key, V value) Imposta un nuovo valore per la chiave.
Il metodo restituisce il vecchio valore o null
putAll(Map<? extends K, ? extends V> m) Aggiunge coppie da un'altra mappa.
void clear() Cancella la mappa, cioè rimuove tutte le coppie.
Set<K>keySet() Restituisce un insieme di chiavi.
Collection<V>values() Restituisce una raccolta di valori.
Set<Map.Entry<K, V>>entrySet() Restituisce un set di coppie.

"K e V sono i parametri di tipo per le chiavi e i valori."

"Beh, ho familiarità con la maggior parte dei metodi, ma ho lavorato solo con alcuni di essi."

"Cos'altro puoi dirmi della classe Entry?"

"Questa classe descrive una coppia di elementi. Ha alcuni metodi:"

Metodi Descrizione
getKey() Restituisce la chiave della coppia chiave-valore.
getValue() Restituisce il valore della coppia chiave-valore.
setValue(V value) Imposta un nuovo valore nella coppia chiave-valore.

"L'inserimento è comodo, perché puoi passare una coppia a un metodo senza passare l'intera mappa."

"Vedo."

"Ora esaminerò le implementazioni della mappa."

"Il primo è HashMap . Usa le tabelle hash per memorizzare gli elementi. Chiavi e valori possono essere di qualsiasi tipo, così come null. L'ordine degli elementi può cambiare quando la raccolta cambia ."

"Gli elementi sono memorizzati in una HashMap come un insieme di gruppi o bucket. Il metodo hashCode() di un elemento determina in quale bucket rientra."

"In parole povere, gli elementi con un codice hash da 1 a 100 cadono nel primo bucket, quelli con un valore da 101 a 200 cadono nel secondo e così via."

"Lo scopo della memorizzazione degli elementi in questo modo è che possiamo eliminare tutti gli elementi in bucket irrilevanti durante la ricerca o la rimozione di elementi."

"Vedo."

"C'è un ottimo articolo su HashMap. Ti consiglio di leggerlo: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3 "

"La seconda raccolta è LinkedHashMap . La sua principale differenza rispetto a HashMap è che memorizza anche gli elementi come un elenco collegato. In una normale HashMap, l'ordine degli elementi non è definito e può cambiare nel tempo. E puoi ottenere un iteratore da una LinkedHashMap e usalo per esaminare tutti gli elementi nell'ordine in cui sono stati aggiunti a LinkedHashMap. Inoltre, LinkedHashMap ha un iteratore che ti consente di esaminare tutte le coppie in ordine di ultimo utilizzo/attività."

"C'è un ottimo articolo su LinkedHashMap. Ecco qui: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036 "

"La terza collezione di cui vorrei parlare oggi è TreeMap ."

" TreeMap mantiene i suoi elementi ordinati in ordine crescente. Ciò si ottiene grazie al fatto che TreeMap utilizza un albero rosso-nero bilanciato per memorizzare gli elementi."

"Di conseguenza, il tempo di inserimento e il tempo di ricerca sono molto bassi. Questa classe è un'ottima scelta quando si utilizzano grandi quantità di dati."

"E, naturalmente, abbiamo un articolo su TreeMap: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5 "

"Di cosa non ti ho ancora parlato?"

"WeakHashMap, ma Rishi me ne ha parlato un paio di giorni fa."

"Quando è stato?"

"Quando ha parlato di SoftReference, WeakReference e PhantomReference."

"Ti credo, visto che li hai nominati tutti correttamente. Allora rilassati. A stasera."

"Ciao, Eli."