— И най-накрая ще ви разкажа за Map.

„Map, Howто знаете, съхранява набор от двойки ключ-стойност. Ключовете трябва да са уникални, но стойностите могат да бъдат всяHowви. Ако добавите двойка ключ-стойност към карта и колекцията вече съдържа ключа, тогава старата стойност ще бъде заменена с новата. С други думи, ключът действа като специален индекс, който може да бъде всеки обект ."

Карта е математически термин, който обозначава набор от (x, y) двойки, в които всяко уникално x съответства на няHowво y.

Програмистите много харесват Map, така че тук представяме 4 различни колекции, които имплементират интерфейса Map:

„Ето неговата проста структура на наследяване:“

Йерархия на картата - 1

„Жълтото показва, че Entry е вложен интерфейс в интерфейса на картата .“

„Записът беше добавен, за да опише двойка елементи като едно цяло.“

"Ето методите на Map<K,V>:"

Методи Описание
int size() Връща броя на двойките в картата.
boolean isEmpty() Проверява дали картата е празна.
boolean containsKey(Object key) Картата съдържа ли посочения ключ?
boolean containsValue(Object value) Картата съдържа ли посочената стойност?
V get(Object key) Връща стойността за посочения ключ.
V put(K key, V value) Задава нова стойност за ключа.
Методът връща старата стойност or нула
putAll(Map<? extends K, ? extends V> m) Добавя двойки от друга карта.
void clear() Изчиства картата, т.е. премахва всички двойки.
Set<K>keySet() Връща набор от ключове.
Collection<V>values() Връща колекция от стойности.
Set<Map.Entry<K, V>>entrySet() Връща набор от двойки.

"K и V са параметрите на типа за ключовете и стойностите."

— Е, запознат съм с повечето методи, но съм работил само с някои от тях.

„Какво друго можете да ми кажете за началния клас?“

"Този клас описва двойка елементи. Има няколко метода:"

Методи Описание
getKey() Връща ключа на двойката ключ-стойност.
getValue() Връща стойността на двойката ключ-стойност.
setValue(V value) Задава нова стойност в двойката ключ-стойност.

„Влизането е удобно, защото можете да прехвърлите двойка към метод, без да преминавате цялата карта.“

"Виждам."

„Сега ще прегледам имплементациите на Map.“

"Първо е HashMap . Той използва хеш таблици за съхраняване на елементи. Ключовете и стойностите могат да бъдат от всяHowъв тип, Howто и null. Редът на елементите може да се промени, когато колекцията се промени ."

"Елементите се съхраняват в HashMap като набор от групи or кофи. Методът hashCode() на даден елемент определя в коя кофа попада."

„Много грубо казано, елементите с хеш code от 1 до 100 попадат в първата група, тези със стойност от 101 до 200 попадат във втората и т.н.

„Смисълът на съхраняването на елементи по този начин е, че можем да елиминираме всички елементи в неподходящи кофи, когато търсим or премахваме елементи.“

"Виждам."

„Има наистина добра статия за HashMap. Препоръчвам ви да я прочетете: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3

„Втората колекция е LinkedHashMap . Основната й разлика от HashMap е, че тя също така съхранява елементи като свързан списък. В обикновена HashMap редът на елементите е недефиниран и може да се промени с времето. И можете да получите итератор от LinkedHashMap и го използвайте, за да преминете през всички елементи в реда, в който са бor добавени към LinkedHashMap. Освен това LinkedHashMap има итератор, който ви позволява да преминете през всички двойки по реда на последно използване/активност."

„Има наистина добра статия за LinkedHashMap. Ето ви: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036

„Третата колекция, за която бих искал да говоря днес, е TreeMap .“

" TreeMap поддържа елементите си сортирани във възходящ ред. Това се постига благодарение на факта, че TreeMap използва балансирано червено-черно дърво за съхраняване на елементи."

„В резултат на това времето за вмъкване и времето за търсене са много ниски. Този клас е чудесен избор при използване на много големи количества данни.“

„И, разбира се, имаме статия за TreeMap: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5

— За Howво още не съм ти казал?

„WeakHashMap, но Риши ми каза за това преди няколко дни.“

"Кога беше това?"

„Когато говореше за SoftReference, WeakReference и PhantomReference.“

„Вярвам ти, като се има предвид, че ги назова всичките правилно. Тогава върви да се отпуснеш. Ще се видим довечера.“

— Чао, Ели.