„I wreszcie opowiem ci o Mapie”.

„Map, jak wiesz, przechowuje zestaw par klucz-wartość. Klucze muszą być unikalne, ale wartości mogą być dowolne. Jeśli dodasz parę klucz-wartość do mapy, a kolekcja już zawiera klucz, to stara wartość zostanie zastąpiona nową. Innymi słowy, klucz działa jak specjalny indeks, którym może być dowolny obiekt ."

Mapa jest terminem matematycznym oznaczającym zestaw par (x, y), w których każdemu unikalnemu x odpowiada jakieś y.

Programiści bardzo lubią Map, więc tutaj przedstawiamy 4 różne kolekcje, które implementują interfejs Map:

„Oto jego prosta struktura dziedziczenia:”

Hierarchia mapy - 1

„Żółty wskazuje, że Entry jest interfejsem zagnieżdżonym w interfejsie mapy ”.

„Dodano wpis opisujący parę elementów jako pojedynczą jednostkę”.

„Oto metody Map<K,V>:”

Metody Opis
int size() Zwraca liczbę par na mapie.
boolean isEmpty() Sprawdza, czy mapa jest pusta.
boolean containsKey(Object key) Czy mapa zawiera określony klucz?
boolean containsValue(Object value) Czy mapa zawiera określoną wartość?
V get(Object key) Zwraca wartość dla określonego klucza.
V put(K key, V value) Ustawia nową wartość klucza.
Metoda zwraca starą wartość lub null
putAll(Map<? extends K, ? extends V> m) Dodaje pary z innej mapy.
void clear() Czyści mapę, czyli usuwa wszystkie pary.
Set<K>keySet() Zwraca zestaw kluczy.
Collection<V>values() Zwraca kolekcję wartości.
Set<Map.Entry<K, V>>entrySet() Zwraca zestaw par.

„K i V to parametry typu dla kluczy i wartości”.

„Cóż, jestem zaznajomiony z większością metod, ale pracowałem tylko z niektórymi z nich”.

„Co jeszcze możesz mi powiedzieć o klasie Entry?”

„Ta klasa opisuje parę elementów. Ma kilka metod:”

Metody Opis
getKey() Zwraca klucz pary klucz-wartość.
getValue() Zwraca wartość pary klucz-wartość.
setValue(V value) Ustawia nową wartość w parze klucz-wartość.

„Wejście jest wygodne, ponieważ możesz przekazać parę do metody bez przechodzenia całej mapy”.

"Widzę."

„Teraz omówię implementacje Map”.

„Najpierw jest HashMap . Wykorzystuje tablice skrótów do przechowywania elementów. Klucze i wartości mogą być dowolnego typu, a także mieć wartość null. Kolejność elementów może się zmieniać, gdy zmienia się kolekcja ”.

„Elementy są przechowywane w HashMap jako zestaw grup lub zasobników. Metoda hashCode() elementu określa, do którego zasobnika należy”.

„Z grubsza mówiąc, elementy o kodzie skrótu od 1 do 100 wpadają do pierwszego segmentu, te o wartości od 101 do 200 wpadają do drugiego i tak dalej”.

„Celem przechowywania elementów w ten sposób jest to, że możemy wyeliminować wszystkie elementy w nieistotnych zasobnikach podczas wyszukiwania lub usuwania elementów”.

"Widzę."

"Jest naprawdę dobry artykuł o HashMap. Polecam go przeczytać: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3 "

„Drugą kolekcją jest LinkedHashMap . Główną różnicą w stosunku do HashMap jest to, że przechowuje również elementy jako połączoną listę. W zwykłej HashMap kolejność elementów jest niezdefiniowana i może zmieniać się w czasie. I możesz uzyskać iterator z LinkedHashMap i używaj go do przeglądania wszystkich elementów w kolejności, w jakiej zostały dodane do LinkedHashMap. Dodatkowo LinkedHashMap ma iterator, który pozwala przeglądać wszystkie pary w kolejności ostatniego użycia/aktywności.

„Jest naprawdę dobry artykuł o LinkedHashMap. Proszę bardzo: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036 "

„Trzecią kolekcją, o której chciałbym dzisiaj porozmawiać, jest TreeMap ”.

" TreeMap utrzymuje swoje elementy w porządku rosnącym. Osiąga się to dzięki temu, że TreeMap używa zrównoważonego czerwono-czarnego drzewa do przechowywania elementów."

„W rezultacie czas wstawiania i wyszukiwania jest bardzo krótki. Ta klasa to doskonały wybór w przypadku korzystania z bardzo dużych ilości danych”.

„I oczywiście mamy artykuł na TreeMap: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5

– O czym ci jeszcze nie mówiłem?

„WeakHashMap, ale Rishi powiedział mi o tym kilka dni temu”.

"Kiedy to było?"

„Kiedy mówił o SoftReference, WeakReference i PhantomReference”.

„Wierzę ci, biorąc pod uwagę, że nazwałeś je wszystkie poprawnie. Więc idź się zrelaksować. Do zobaczenia wieczorem”.

– Do widzenia, Ellie.