MAP – структура данных, включающая в себя набор пар «ключ–значение». Напоминает словарь, из-за чего соответствующий компонент часто так и называется. MAP – это еще и интерфейс. В стандартном JDK он поддерживает сразу несколько реализаций. Одна из них является более распространенной и называется Hashmap. Она будет рассмотрена более подробно.

Определение и виды

The map in Java – это вершина иерархии Java Collection. Структура, которая включена в стандартный JDK, начиная с версии 1.2. Предоставляет программисту базовые методы для работы с данными, реализованными в качестве пар «ключ–значение». Функции интерфейса расширяются вместе с обновлениями и совершенствованием Java.

Интерфейс MAP в Java

Выше можно увидеть иерархию the maps. Среди реализаций этот компонент разработки выделяет:

  • Hashmap;
  • LinkedHashMap;
  • TreeMap.

Первый вариант пользуется наибольшим применением. Он будет представлен в рассматриваемых далее примерах в подавляющем большинстве.

Карты – структуры данных, необходимые для быстрого поиска. Информация будет храниться по типу «key – value». Каждый ключ в соответствующей подборке уникален. Каждый ключ полностью соответствует значению. Соответствующие пары «key – values» называются элементами карты.

The Java.util.MAP – это the interface, включающий в себя сигнатуры методов для вставки, извлечения, а также удаления.

Особенности the maps

Интерфейсы Map реализуются несколькими классами в Collections Framework. Каждый из них – это отдельная функциональность, а также безопасность потоков. Самый распространенный вариант уже был упомянут – HashMap. Он встречается в основной массе приложений, написанных на JDK.

Карты – единственная коллекция Collections Framework, которая не расширяет и не реализует непосредственно интерфейс коллекции. The Map не подойдет для контракта, потому что требует работы с парами, а не с отдельными значениями.

Основные операции

Чтобы полноценно пользоваться коллекциями the map в Java, необходимо знать methods для реализации того или иного функционала. Далее предстоит изучить ключевые команды. Они помогут с дальнейшим освоением изучаемого компонента.

Создание

Создание (create) подразумевает, что ключи и значения карты могут быть ссылками любого типа. Использовать примитивный тип данных из-за имеющихся ограничений не получится. Они напрямую связаны с разработкой дженериков.

The HashMap разрешает создание одного нулевого ключа (the key) и нескольких нулевых значений (values). Он не сохраняет порядок компонентов и не гарантирует, что он всегда будет неизменным.

Создание (creating) HashMap с целочисленными ключами и строковыми значениями осуществляется так:

Map<Integer, String> map = new HashMap<>();

Все методы (methods), представленные далее, подойдут для любой реализации the map из Collections Framework. Связано это с тем, что все карты реализуют maps interface.

Добавление (вставка) записей

Для добавления записей в карту используется метод put. Он поддерживает всего два параметра:

  • ключ;
  • значение.

Далее некоторые методы будут изучены на наглядных примерах. В случае с put the mapping необходимо заполнить карту идентификаторами и именами:

map.put(1, "Petyr Baelish");

map.put(2, "Sansa Stark");

map.put(3, "Jon Snow");

map.put(4, "Jamie Lannister");

Ниже – пример того, как соответствующий компонент выглядит при обработке предложенного фрагмента программного кода:

Интерфейс MAP в Java

Иногда необходимо добавить сразу несколько записей или объединить две карты. Put в этом случае не подойдет. Для выполнения соответствующих задач используется команда put all. Она будет копировать ссылки на записи от одной карты для непосредственного заполнения другой.

Дублирование ключей

The keys в картах не могут дублироваться. Если попытаться вставить уже существующий ключ, получится следующая ситуация:

map.put(4, «Daenerys Targaryen»);

Интерфейс MAP в Java

Здесь метод put вернет предыдущее значение, если его хочется использовать. Если предыдущего значения не было, возвращается Null.

Для проверки наличия ключа на создание (creating) используется логический метод containsKey:

if (map.containsKey(4)) {

  throw new IllegalArgumentException("Unable to add character, duplicate id");

}

В случае created values используется метод containsValue():

boolean check = map.containsValue("Brienne of Tarth"); // false

Соответствующий прием позволяет проверить наличие в коллекции (словаре) того или иного значения.

Получение информации

В процессе работы с картами в Java иногда мы получаем ту или иную информацию. Для выполнения соответствующей операции используется отдельный the method. Он называется get.

String value = map.get(4); // Daenerys Targaryen

Данный метод принимает ключ, а возвращает значение, которое связано с соответствующим the key. Если «параметры» отсутствуют, get позволит получить NULL.

Удаление элементов

Вместе с созданием (create) карты поддерживают удаление. Это еще одна «стандартная» операция, которая позволяет получить откорректированный словарь.

Для удаления компонентов используется метод the remove. Он работает так:

  1. Принимает ключ в виде «входного» параметра.
  2. Ищет запись, которую необходимо удалить.
  3. Возвращает значение, связанное с удаленным компонентом. Если оно отсутствует, результатом выполнения операции будет NULL.

map.remove(3); // removes and returns "Jon Snow"

map.remove(3); // removes nothing and returns null

Интерфейс MAP в Java

Для того чтобы получить «очищенную» карту, может быть вызвана команда clear. Она представлена методом void. Ничего не возвращает.

Интерфейс MAP в Java

Выше – наглядный пример (example) формы записи соответствующей команды.

Размеры

Операция size вернет количество записей на карте:

int size = map.size();

При помощи isEmpty удастся вернуть логическое значение. Оно покажет, пуста ли используемая collection, или нет.

boolean isEmpty = map.isEmpty();

Формат написания соответствующей операции. Этот фрагмент можно вставить в исходный код для проверки на пустоту.

Просмотр коллекций

The interfaces «МАП» предоставляют команды, помогающие просматривать collection. С их помощью удастся изучать карту с точки зрения типа коллекции. Соответствующие представления имеют единственный механизм перебора.

Воспользоваться для просмотра collections рекомендуется такими операциями как:

  • keySet – применяется для возврата набора ключей с карты;
  • values – возвращает коллекцию значений и «МАП»;
  • entrySet – применяется для возврата набора объектов Map.Empty, которые реализованы в виде пары «ключ–значение» на карте.

Стоит помнить, что просмотры поддерживаются используемой картой. Это значит, что любые изменения, внесенные в представление, обновляют «базовый» объект. Обратный принцип здесь тоже работает. Представления допускают удаление created a value and keys, но не вставку.

KeySet

KeySet используется для того, чтобы вернуть набор ключей, содержащихся в карте:

Set<Integer> keys = map.keySet(); // [1, 2, 4]

Других предназначений команда не имеет.

The value и EntrySet

Пользуясь просмотром the java util map, иногда необходимо вернуть the collection value, хранимых в карте:

Интерфейс MAP в Java

Представленная команда не вернет всю коллекцию вместо набора. Связано это с тем, что параметры карты не обязательно являются уникальными. Набор в этом случае функционировать не будет.

При помощи операции entrySet разработчик сможет получить набор записей в the collection. Результатом станет набор объектов the Map.Entry. Объекты the Map.Entry представлены в виде пары «ключ–значение». Для соответствующих компонентов допускается использование таких команд как getKey и getValue.

EntrySet часто используется для формирования циклов.

Итерации

Итерации по the mapping collections возможны различными способами. Далее будут представлены наиболее распространенные концепции и реализации.

Стоит обратить внимание на то, что циклы вызывают исключение the NullPointerException. Это произойдет, если попытаться перебрать нулевую карту.

Применение Foreach

Наиболее распространенный вариант итерации по the map – это использование foreach. Он предпочтителен для основной массы задач.

Интерфейс MAP в Java

При обработке соответствующего фрагмента разработчику будет предоставлен доступ не только к ключам, но и к значениям.

Интерфейс MAP в Java

Выше – наглядный пример использования лямбда-выражений в Java 8.

Сортировка по ключу

Hashmap не позволяет сохранить порядок в своих записях. Ниже – пример, наглядно демонстрирующий соответствующую ситуацию:

Интерфейс MAP в Java

После обработки кода содержимое the map будет выведено в консоль, но в случайном порядке:

Интерфейс MAP в Java

При использовании TreeMap произойдет автоматическая сортировка по ключу. Вот так будет выглядеть преобразование HashMap в the ThreeMap:

Интерфейс MAP в Java
Интерфейс MAP в Java

Выше – пример реализации операции и результат, который будет выведен непосредственно на дисплей устройства. Такой подход – это сортировка по ключу.

По значению

Более сложный вариант осуществления итераций в картах – это сортировка содержимого по значениям. Ниже – фрагмент, на который можно опираться при реализации команды:

Интерфейс MAP в Java

Здесь:

  1. В строке 3 создается список именованных записей. Они включают в себя объекты the map.Entry из карты, в которую был передан метод.
  2. Строки 5-10 используются вместе с Collections.sort(). В них реализован Comparator при помощи entry.getValue. Это необходимо для того, чтобы система понимала, как именно сравнивать записи. Они будут отсортированы по значению.
  3. В 12 строчке создается LinkedHashMap. Он представляет собой реализацию карты, которая сохраняет порядок вставки имеющихся записей.
  4. Строки 14-16 дают возможность «перебрать» список и заполнить новую the map.
Интерфейс MAP в Java
Интерфейс MAP в Java

Выше – наглядный пример соответствующего варианта организации итераций в действии. Пользователи могут увидеть не только фрагмент кода, но и результат, выводимый на дисплее.

Java 9

Интерфейс the map в Java 9 поддерживает синтаксический сахар для неизменных карт. Под ними подразумевается компонент, который не может изменяться. В такой карте не поддерживаются ни команды удаления, ни добавления новых записей.

Интерфейс MAP в Java

Выше можно увидеть пример создания такого объекта в Java 8. Java 9 предлагает статический фабричный метод Map.of. Он нужен для упрощения создания неизменных карт.

Интерфейс MAP в Java

На the map поддерживаются методы добавления и удаления записей. При их вызове появляется исключение UnsupportedOperationException.

Теперь основы the mapping в Java изучены в общих чертах. Здесь можно увидеть наглядный пример того, как реализована работа с картами. Быстрее и лучше изучить соответствующий компонент и иные инструменты программирования на Java помогут специальные дистанционные компьютерные курсы.