9, основният въпрос за картата в Java

9, основните въпроси на картата в Java

9, основният въпрос за картата в Java

оригинал
Спомнете си, че Map - структурирани данни се състои от набор от двойки ключ-стойност, а всеки ключ може да се използва само веднъж в карта. Тази тема разкрива 9 основни въпроси за това как да се използва карта на Java, и това въплъщение (изпълнение) класове. За простота, аз ще използвам в примерите за обобщаване. Защото, аз ще пиша просто карта. без да се уточнява квалификационен карта. Но може да се предположи, че и двете K и V стойности са сравними, което означава, K простира Сравними и V се отнася и сравними.

0 Адрес Карта в Списъка
В Java Карта интерфейс предоставя три вида колекции: набор от ключове, набор от ценности, както и набор от ключ-стойност. Всички те могат да се превърнат в Списък с помощта на конструктор или метод addAll (). Следният код демонстрира как да се направи филе ArrayList на картата.


1. Преминете през всички стойности на картата.
Преминаването на всяка двойка ключ-стойност - основата, основната процедура на преминаване на картата. В Java за всяка двойка се съхранява в областта на карта, наречена Map.Entry. Карта .entrySet () връща набор от ключ-стойност, тъй като най-ефективният начин да се мине през всички карти на стойности ще:

Така че ние можем да използваме итератор, особено в по-малките версии на JDK 1.5


2. Организиране Карта за ключове
Карта ключовете поръчка на друг често се срещна процедура. Първи начин: добавете Map.Entry в списъка, както и оптимизирани, като се използва за сравнение, че сортира от ценности.

Друг начин е да се използва SortedMap. че всичко, което се натрупва все повече и ключовете си в ред. Но, всички ключове в същото време трябва да прилагат сходни, или получени от сравнение.
Един от класовете изпълнение SortedMap - дървовидна карта. Неговият конструктор отнема за сравнение. Следният код показва как да се превърне един обикновен Карта в подреден.


3. Организиране Карта на ценности
Добавяне на карта към списъка и последваща работа сортиране, и в този случай, но е необходимо в този момент да вземе Влизане .getValue (). Кодът по-долу е почти същото, както преди.

Все още можем да използваме SortedMap в този случай, но само ако стойностите са уникални. В този случай, можете да се обърнете ключ-стойност двойка в ключ-стойност. Това решение има строго ограничаване и не се препоръчва от мен.

Гуава библиотека също поддържа различни начини, за да се инициализира статични и неизменни колекции. За да разгледате повече ползи Guava помощни програми за постоянно събиране, се отнесете към инструкциите в постоянно събиране гуава.

5. Разликата между HashMap, дървовидна карта и Hashtable
Има три основни превъплъщения Карта интерфейс в Java: HashMap. Дървовидна карта. и Hashtable. Основните разлики са, както следва:
  • Редът на пасаж. HashMap и HashTable не дават гаранции за ред в Map; по-специално, те не гарантират, че поръчката ще остане същата, с течение на времето. Но дървовидна карта ще организира всички стойности в ключовете или сравнителен "естествен ред".
  • Приемливи двойки ключ-стойност. HashMap ви позволява да имате ключа и нула до нула. HashTable не позволява нула ключ или стойност е нула. Ако дървовидна карта използва естествения ред, или сравнителен не позволява нула ключ. ще се появи изключение.
  • Синхронизация. Само HashTable се синхронизира, а останалите - не. Но "ако за нишки, изпълнение, не се препоръчва да го използвате вместо HashMap HashTable».
По-детайлно сравнение

7. плитко копие Карта
Почти всички, ако не всички, Карта на Java съдържа копие конструктор друга карта. Но процедурата по копиране не е синхронизиран. Какво означава, когато копия една нишка на картата, а другият може да се промени неговата структура. За да се предотврати внезапно в синхрон архивиране, един от тях трябва да се използва в такъв случай Collections.synchronizedMap ().

Друг интересен начин за копиране на повърхността - с помощта на метод клонинг (). Но това не се препоръчва, дори създателят на рамката на Java Колекции, Джон Блох. Спорът "копие конструктор срещу клониране", той заема позицията на:
Цитат: ".. Аз често цитират обществения метод клонинг в определен клас, тъй като хората очакват да видят там ... това е срамота, че клонирането е счупен, но това се е случило ... Клонирането е слабо място, и мисля, че хората трябва да са наясно с неговите ограничения." поради тази причина, аз дори не ви покаже как да използвате метода клонинг (), за да копирате Карта

8. Създаване на празна карта
Ако картата е непроменена, използвайте

Или използвайте други въплъщение. например