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. Създаване на празна карта
Ако картата е непроменена, използвайте
Или използвайте други въплъщение. например