Map string class in java

Ответы на самые популярные вопросы об интерфейсе Map

Java-университет

Ответы на самые популярные вопросы об интерфейсе Map - 1

Привет! Сегодня мы дадим ответы на самые распространенные вопросы о Map, но для начала давай вспомним, что это такое. Map — это структура данных, которая содержит набор пар “ключ-значение”. По своей структуре данных напоминает словарь, поэтому ее часто так и называют. В то же время, Map является интерфейсом, и в стандартном jdk содержит основные реализации: Hashmap, LinkedHashMap, Hashtable, TreeMap. Самая используемая реализация — Hashmap, поэтому и будем ее использовать в наших примерах. Вот так выглядит стандартное создание и заполнение мапы:

 Map map = new HashMap<>(); map.put(1, "string 1"); map.put(2, "string 2"); map.put(3, "string 3"); 
 String string1 = map.get(1); String string2 = map.get(2); String string3 = map.get(3); 

0. Как перебрать все значения Map

Перебор значений — самая частая операция, которую вы выполняете с мапами. Все пары (ключ-значение) хранятся во внутреннем интерфейсе Map.Entry, а чтобы получить их, нужно вызвать метод entrySet() . Он возвращает множество (Set) пар, которые можно перебрать в цикле:

 for(Map.Entry entry: map.entrySet()) < // get key Integer key = entry.getKey(); // get value String value = entry.getValue(); >Или используя итератор: Iterator itr = map.entrySet().iterator(); while(itr.hasNext()) < Map.Entryentry = itr.next(); // get key Integer key = entry.getKey(); // get value String value = entry.getValue(); > 

1. Как конвертировать Map в List

  • keySet() — возвращает множество(Set) ключей;
  • values() — возвращает коллекцию(Collection) значений;
  • entrySet() — возвращает множество(Set) наборов “ключ-значение”.
 // key list List keyList = new ArrayList<>(map.keySet()); // value list List valueList = new ArrayList<>(map.values()); // key-value list List> entryList = new ArrayList<>(map.entrySet()); 

2. Как отсортировать ключи мапы

  1. Поместить Map.Entry в список и отсортировать его, используя Comparator. В компараторе будем сравнивать исключительно ключи пар:
 List> list = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator>() < @Override public int compare(Map.Entryo1, Map.Entry o2) < return o1.getKey() - o2.getKey(); >>);
 Collections.sort(list, Comparator.comparingInt(Map.Entry::getKey)); 
 SortedMap sortedMap = new TreeMap<>(new Comparator() < @Override public int compare(Integer o1, Integer o2) < return o1 - o2; >>); 
 SortedMap sortedMap = new TreeMap<>(Comparator.comparingInt(o -> o)); 

3. Как отсортировать значения мапы

Здесь стоит использовать подход, аналогичный первому для ключей — получать список значений и сортировать их в списке:

 List > valuesList = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator>() < @Override public int compare(Map.Entryo1, Map.Entry o2) < return o1.getValue().compareTo(o2.getValue()); >>); 
 Collections.sort(list, Comparator.comparing(Map.Entry::getValue)); 

4. В чем разница между HashMap, TreeMap, и Hashtable

  1. Порядок элементов. HashMap и Hashtable не гарантируют, что элементы будут храниться в порядке добавления. Кроме того, они не гарантируют, что порядок элементов не будет меняться со временем. В свою очередь, TreeMap гарантирует хранение элементов в порядке добавления или же в соответствии с заданным компаратором.
  2. Допустимые значения. HashMap позволяет иметь ключ и значение null, HashTable — нет. TreeMap может использовать значения null только если это позволяет компаратор. Без использования компаратора (при хранении пар в порядке добавления) значение null не допускается.
  3. Синхронизация. Только HashTable синхронизирована, остальные — нет. Если к мапе не будут обращаться разные потоки, рекомендуется использовать HashMap вместо HashTable.
HashMap HashTable TreeMap
Упорядоченность элементов нет нет да
null в качестве значения да нет да/нет
Потокобезопасность нет да нет
Алгоритмическая сложность поиска элементов O(1) O(1) O(log n)
Структура данных под капотом хэш-таблица хэш-таблица красно-чёрное дерево

5. Как создать двунаправленную мапу

Иногда появляется необходимость использовать структуру данных, в которой и ключи, и значения будут уникальными, то есть мапа будет содержать пары “ключ-ключ”. Такая структура данных позволяет создать "инвертированный просмотр/поиск" по мапе. То есть, мы можем найти ключ по его значению.Эту структуру данных называют двунаправленной мапой, которая, к сожалению, не поддерживается JDK. Но, к счастью, ее реализацию можно найти в библиотеках Apache Common Collections или Guava. Там она называется BidiMap и BiMap соответственно. Эти реализации вводят ограничения на уникальность ключей и значений. Таким образом получаются отношения one-to-one.

6. Как создать пустую Map

 Map emptyMap = new HashMap<>(); 
 Map emptyMap = Collections.emptyMap(); 

Источник

Читайте также:  Питон на телефон программирование
Оцените статью