MAP – структура данных, включающая в себя набор пар «ключ–значение». Напоминает словарь, из-за чего соответствующий компонент часто так и называется. MAP – это еще и интерфейс. В стандартном JDK он поддерживает сразу несколько реализаций. Одна из них является более распространенной и называется Hashmap. Она будет рассмотрена более подробно.
Определение и виды
The map in Java – это вершина иерархии Java Collection. Структура, которая включена в стандартный JDK, начиная с версии 1.2. Предоставляет программисту базовые методы для работы с данными, реализованными в качестве пар «ключ–значение». Функции интерфейса расширяются вместе с обновлениями и совершенствованием 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");
Ниже – пример того, как соответствующий компонент выглядит при обработке предложенного фрагмента программного кода:
Иногда необходимо добавить сразу несколько записей или объединить две карты. Put в этом случае не подойдет. Для выполнения соответствующих задач используется команда put all. Она будет копировать ссылки на записи от одной карты для непосредственного заполнения другой.
Дублирование ключей
The keys в картах не могут дублироваться. Если попытаться вставить уже существующий ключ, получится следующая ситуация:
map.put(4, «Daenerys Targaryen»);
Здесь метод 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. Он работает так:
- Принимает ключ в виде «входного» параметра.
- Ищет запись, которую необходимо удалить.
- Возвращает значение, связанное с удаленным компонентом. Если оно отсутствует, результатом выполнения операции будет NULL.
map.remove(3); // removes and returns "Jon Snow"
map.remove(3); // removes nothing and returns null
Для того чтобы получить «очищенную» карту, может быть вызвана команда clear. Она представлена методом void. Ничего не возвращает.
Выше – наглядный пример (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, хранимых в карте:
Представленная команда не вернет всю коллекцию вместо набора. Связано это с тем, что параметры карты не обязательно являются уникальными. Набор в этом случае функционировать не будет.
При помощи операции entrySet разработчик сможет получить набор записей в the collection. Результатом станет набор объектов the Map.Entry. Объекты the Map.Entry представлены в виде пары «ключ–значение». Для соответствующих компонентов допускается использование таких команд как getKey и getValue.
EntrySet часто используется для формирования циклов.
Итерации
Итерации по the mapping collections возможны различными способами. Далее будут представлены наиболее распространенные концепции и реализации.
Стоит обратить внимание на то, что циклы вызывают исключение the NullPointerException. Это произойдет, если попытаться перебрать нулевую карту.
Применение Foreach
Наиболее распространенный вариант итерации по the map – это использование foreach. Он предпочтителен для основной массы задач.
При обработке соответствующего фрагмента разработчику будет предоставлен доступ не только к ключам, но и к значениям.
Выше – наглядный пример использования лямбда-выражений в Java 8.
Сортировка по ключу
Hashmap не позволяет сохранить порядок в своих записях. Ниже – пример, наглядно демонстрирующий соответствующую ситуацию:
После обработки кода содержимое the map будет выведено в консоль, но в случайном порядке:
При использовании TreeMap произойдет автоматическая сортировка по ключу. Вот так будет выглядеть преобразование HashMap в the ThreeMap:
Выше – пример реализации операции и результат, который будет выведен непосредственно на дисплей устройства. Такой подход – это сортировка по ключу.
По значению
Более сложный вариант осуществления итераций в картах – это сортировка содержимого по значениям. Ниже – фрагмент, на который можно опираться при реализации команды:
Здесь:
- В строке 3 создается список именованных записей. Они включают в себя объекты the map.Entry из карты, в которую был передан метод.
- Строки 5-10 используются вместе с Collections.sort(). В них реализован Comparator при помощи entry.getValue. Это необходимо для того, чтобы система понимала, как именно сравнивать записи. Они будут отсортированы по значению.
- В 12 строчке создается LinkedHashMap. Он представляет собой реализацию карты, которая сохраняет порядок вставки имеющихся записей.
- Строки 14-16 дают возможность «перебрать» список и заполнить новую the map.
Выше – наглядный пример соответствующего варианта организации итераций в действии. Пользователи могут увидеть не только фрагмент кода, но и результат, выводимый на дисплее.
Java 9
Интерфейс the map в Java 9 поддерживает синтаксический сахар для неизменных карт. Под ними подразумевается компонент, который не может изменяться. В такой карте не поддерживаются ни команды удаления, ни добавления новых записей.
Выше можно увидеть пример создания такого объекта в Java 8. Java 9 предлагает статический фабричный метод Map.of. Он нужен для упрощения создания неизменных карт.
На the map поддерживаются методы добавления и удаления записей. При их вызове появляется исключение UnsupportedOperationException.
Теперь основы the mapping в Java изучены в общих чертах. Здесь можно увидеть наглядный пример того, как реализована работа с картами. Быстрее и лучше изучить соответствующий компонент и иные инструменты программирования на Java помогут специальные дистанционные компьютерные курсы.