— Și în cele din urmă, o să-ți spun despre Map.

„Harta, după cum știți, stochează un set de perechi cheie-valoare. Cheile trebuie să fie unice, dar valorile pot fi orice. Dacă adăugați o pereche cheie-valoare la o hartă, iar colecția conține deja cheia, atunci valoarea veche va fi înlocuită cu cea nouă. Cu alte cuvinte, cheia acționează ca un index special care poate fi orice obiect ."

Harta este un termen matematic care denotă o mulțime de perechi (x, y), în care fiecare x unic corespunde unui y.

Programatorii sunt foarte pasionați de Map, așa că aici vă prezentăm 4 colecții diferite care implementează interfața Map:

„Iată structura sa simplă de moștenire:”

Ierarhia hărții - 1

„Galbenul indică faptul că Entry este o interfață imbricată în interfața Hartă .”

„Entrarea a fost adăugată pentru a descrie o pereche de elemente ca o singură entitate.”

"Iată metodele Map<K,V>:"

Metode Descriere
int size() Returnează numărul de perechi din hartă.
boolean isEmpty() Verifică dacă harta este goală.
boolean containsKey(Object key) Harta conține cheia specificată?
boolean containsValue(Object value) Harta conține valoarea specificată?
V get(Object key) Returnează valoarea pentru cheia specificată.
V put(K key, V value) Setează o nouă valoare pentru cheie.
Metoda returnează valoarea veche sau nulă
putAll(Map<? extends K, ? extends V> m) Adaugă perechi de pe altă hartă.
void clear() Șterge harta, adică elimină toate perechile.
Set<K>keySet() Returnează un set de chei.
Collection<V>values() Returnează o colecție de valori.
Set<Map.Entry<K, V>>entrySet() Returnează un set de perechi.

„K și V sunt parametrii de tip pentru chei și valori”.

— Ei bine, sunt familiarizat cu majoritatea metodelor, dar am lucrat doar cu unele dintre ele.

"Ce mai poți să-mi spui despre clasa de intrare?"

„Această clasă descrie o pereche de elemente. Are câteva metode:”

Metode Descriere
getKey() Returnează cheia perechii cheie-valoare.
getValue() Returnează valoarea perechii cheie-valoare.
setValue(V value) Setează o nouă valoare în perechea cheie-valoare.

„Intrarea este convenabilă, deoarece puteți trece o pereche la o metodă fără a trece întreaga hartă”.

"Înțeleg."

„Acum voi trece peste implementările Hărților.”

„În primul rând este HashMap . Folosește tabele hash pentru a stoca elemente. Cheile și valorile pot fi de orice tip, precum și nule. Ordinea elementelor se poate schimba atunci când colecția se schimbă .”

„Elementele sunt stocate într-un HashMap ca un set de grupuri sau găleți. Metoda hashCode() a unui element determină în ce găleată se încadrează.”

„Foarte aproximativ vorbind, elementele cu un cod hash de la 1 la 100 cad în prima găleată, cele cu o valoare de la 101 la 200 cad în a doua și așa mai departe”.

„Scopul de a stoca elemente în acest fel este că putem elimina toate elementele din găleți irelevante atunci când căutăm sau eliminăm elemente.”

"Înțeleg."

„Există un articol foarte bun despre HashMap. Vă recomand să-l citiți: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3

„A doua colecție este LinkedHashMap . Principala sa diferență față de HashMap este că stochează și articole ca o listă legată. Într-un HashMap obișnuit, ordinea elementelor este nedefinită și se poate schimba în timp. Și puteți obține un iterator dintr-un LinkedHashMap. și folosiți-l pentru a parcurge toate elementele în ordinea în care au fost adăugate la LinkedHashMap. În plus, LinkedHashMap are un iterator care vă permite să parcurgeți toate perechile în ordinea ultimei utilizări/activitate."

„Există un articol foarte bun despre LinkedHashMap. Iată: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036

„A treia colecție despre care aș vrea să vorbesc astăzi este TreeMap .”

" TreeMap își păstrează elementele sortate în ordine crescătoare. Acest lucru se realizează datorită faptului că TreeMap folosește un arbore echilibrat roșu-negru pentru a stoca elemente."

„Ca urmare, timpul de inserare și timpul de căutare sunt foarte mici. Această clasă este o alegere excelentă atunci când se utilizează cantități foarte mari de date.”

„Și, desigur, avem un articol pe TreeMap: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5

— Despre ce nu ți-am spus încă?

„WeakHashMap, dar Rishi mi-a spus despre asta acum câteva zile”.

"Cand a fost asta?"

„Când a vorbit despre SoftReference, WeakReference și PhantomReference”.

"Te cred, având în vedere că le-ai numit corect pe toate. Atunci du-te relaxează-te. Ne vedem diseară."

— La revedere, Ellie.