— И най-накрая ще ви разкажа за Map.
„Map, Howто знаете, съхранява набор от двойки ключ-стойност. Ключовете трябва да са уникални, но стойностите могат да бъдат всяHowви. Ако добавите двойка ключ-стойност към карта и колекцията вече съдържа ключа, тогава старата стойност ще бъде заменена с новата. С други думи, ключът действа като специален индекс, който може да бъде всеки обект ."
Карта е математически термин, който обозначава набор от (x, y) двойки, в които всяко уникално x съответства на няHowво y.
Програмистите много харесват Map, така че тук представяме 4 различни колекции, които имплементират интерфейса Map:
„Ето неговата проста структура на наследяване:“

„Жълтото показва, че 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 са параметрите на типа за ключовете и стойностите."
— Е, запознат съм с повечето методи, но съм работил само с някои от тях.
„Какво друго можете да ми кажете за началния клас?“
"Този клас описва двойка елементи. Има няколко метода:"
Методи | Описание |
---|---|
K getKey() |
Връща ключа на двойката ключ-стойност. |
V getValue() |
Връща стойността на двойката ключ-стойност. |
V 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.“
„Вярвам ти, като се има предвид, че ги назова всичките правилно. Тогава върви да се отпуснеш. Ще се видим довечера.“
— Чао, Ели.
GO TO FULL VERSION