Автор оригинала: Pankaj Kumar.
Карта Java является частью фреймворка коллекций. Объект Java Map используется для хранения сопоставлений ключ-значение. Карта Java не может содержать дубликаты ключей, однако допускаются дубликаты значений.
Карта Java
Некоторые из важных моментов, связанных с картой на java, заключаются в следующем;
- Карта предоставляет три вида коллекции – набор ключей, набор сопоставлений ключ-значение и набор значений.
- Карта не гарантирует порядок отображений, однако это зависит от реализации. Например, HashMap не гарантирует порядок сопоставлений, но TreeMap гарантирует.
- Карта использует хэш-код и методы равенства на ключе для операций get и put. Таким образом, изменяемые классы не подходят для ключей карты. Если значения хэш-кода или равенства изменятся после put, вы не получите правильное значение в операции get.
- Популярными классами реализации Map в Java являются HashMap, Hashtable, TreeMap, ConcurrentHashMap и LinkedHashMap.
- Класс AbstractMap обеспечивает скелетную реализацию интерфейса карты, большинство конкретных классов карт расширяют класс AbstractMap и реализуют необходимые методы.
Методы отображения Java
Давайте рассмотрим некоторые из важных методов составления карт.
- int size() : возвращает количество сопоставлений ключ-значение на этой карте.
- логическое значение isEmpty() : возвращает значение true, если сопоставления отсутствуют, в противном случае значение false.
- логическое значение содержит значение(значение объекта) : возвращает значение true, если хотя бы один ключ сопоставлен с указанным значением, в противном случае значение false.
- V get(ключ объекта) : возвращает значение, сопоставленное данному ключу, если сопоставление не найдено, возвращает значение null.
- V put(ключ K, значение V) : добавляет отображение пары ключ-значение на карту. Если этому ключу уже сопоставлено значение, замените его. Этот метод возвращает предыдущее значение, связанное с ключом, или значение null, если для ключа не было сопоставления.
- V удалить(ключ объекта) : Удаляет сопоставление для ключа с этой карты, если оно присутствует. Возвращает значение, с которым эта карта ранее связывала ключ, или значение null, если карта не содержала сопоставления для ключа.
- void putAll(Карта расширяет K, ? расширяет V> m) : Копирует все сопоставления с указанной карты на эту карту. расширяет K, ? расширяет V> m)
- : Копирует все сопоставления с указанной карты на эту карту. void clear()
- : удаляет все сопоставления с карты. Set keySet()
- : возвращает заданное представление всех ключей на карте. Этот набор ключей поддерживается картой, поэтому любые изменения карты будут отражены в наборе ключей и наоборот. Коллекция значений()
- : возвращает представление коллекции всех значений на карте. Эта коллекция поддерживается картой, поэтому любое изменение карты будет отражаться на этой коллекции значений и наоборот. Set V>> entrySet()
В Java Map есть несколько методов, представленных в Java 8.
- по умолчанию V getOrDefault(ключ объекта, V Значение по умолчанию) : Возвращает значение, к которому сопоставлен указанный ключ, или значение по умолчанию, если эта карта не содержит сопоставления для ключа.
- по умолчанию пусто для каждого(двоичный номер super K, ? super V> действие) : Выполняет данное действие для каждой записи на этой карте. super K, ? super V> действие)
- : Выполняет данное действие для каждой записи на этой карте. по умолчанию пустая замена всех(бифункция super K, ? super V, ? расширяет функцию V>)
- : Заменяет значение каждой записи результатом вызова данной функции для этой записи. super K, ? super V, ? расширяет функцию V>) : Заменяет значение каждой записи результатом вызова данной функции для этой записи.
- по умолчанию V putIfAbsent(ключ K, значение V) : Если указанный ключ еще не связан со значением (или сопоставлен нулю), связывает его с заданным значением и возвращает значение null, else возвращает текущее значение.
- логическое удаление по умолчанию(ключ объекта, значение объекта) : Удаляет запись для указанного ключа, только если он в данный момент сопоставлен с указанным значением.
- логическая замена по умолчанию(K ключ, V старое значение, V новое значение) : Заменяет запись для указанного ключа, только если в данный момент сопоставлено с указанным значением.
- по умолчанию V заменить(ключ K, значение V) : Заменяет запись для указанного ключа, только если в данный момент он сопоставлен с каким-либо значением.
- по умолчанию V вычислениеfabsent(клавиша K, Функция super K, ? расширяет V> Функция сопоставления) : Если указанный ключ еще не связан со значением (или сопоставлен с нулем), пытается вычислить его значение с помощью данной функции сопоставления и вводит его в эту карту, если значение не равно нулю. super K, ? расширяет V> Функция сопоставления)
- : Если указанный ключ еще не связан со значением (или сопоставлен с нулем), пытается вычислить его значение с помощью данной функции сопоставления и вводит его в эту карту, если значение не равно нулю. по умолчанию V computeIfPresent(ключ K, бифункция super K, ? super V, ? расширяет V> Функция переназначения)
- : Если значение для указанного ключа присутствует и не равно нулю, пытается вычислить новое сопоставление с учетом ключа и его текущего сопоставленного значения. Если функция возвращает значение null, сопоставление удаляется. super K, ? super V, ? расширяет V> Функция переназначения) : Если значение для указанного ключа присутствует и не равно нулю, пытается вычислить новое сопоставление с учетом ключа и его текущего сопоставленного значения. Если функция возвращает значение null, сопоставление удаляется.
Вы заметите, что все новые методы, добавленные в интерфейс карты Java 8, являются методами по умолчанию с реализацией. Это делается для того, чтобы убедиться в отсутствии ошибок компиляции для любых классов, реализующих интерфейс карты.
Пример карты Java
Давайте рассмотрим простую программу для примера Java-карты. Мы будем использовать класс реализации карты HashMap для нашего примера программы.
package com.journaldev.examples; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class MapExample { public static void main(String[] args) { Mapdata = new HashMap<>(); data.put("A", "A"); // put example data.put("B", "B"); data.put("C", "C"); data.put("D", null); // null value data.put(null, "Z"); // null key String value = data.get("C"); // get example System.out.println("Key = C, Value = " + value); value = data.getOrDefault("E", "Default Value"); System.out.println("Key = E, Value=" + value); boolean keyExists = data.containsKey(null); boolean valueExists = data.containsValue("Z"); System.out.println("keyExists= " + keyExists + ", valueExists= " + valueExists); Set > entrySet = data.entrySet(); System.out.println(entrySet); System.out.println("data map size=" + data.size()); Map data1 = new HashMap<>(); data1.putAll(data); System.out.println("data1 mappings= " + data1); String nullKeyValue = data1.remove(null); System.out.println("data1 null key value = " + nullKeyValue); System.out.println("data1 after removing null key = " + data1); Set keySet = data.keySet(); System.out.println("data map keys = " + keySet); Collection values = data.values(); System.out.println("data map values = " + values); data.clear(); System.out.println("data map is empty =" + data.isEmpty()); } }
Вывод приведенного выше примера программы карты является;
Key = C, Value = C Key = E, Value=Default Value keyExists= true, valueExists= true [null=Z, A=A, B=B, C=C, D=null] data map size=5 data1 mappings= {null=Z, A=A, B=B, C=C, D=null} data1 null key value = Z data1 after removing null key = {A=A, B=B, C=C, D=null} data map keys = [null, A, B, C, D] data map values = [Z, A, B, C, null] data map is empty =true
Это все для быстрого ознакомления с интерфейсом карты Java. Для примера Java-карты новых методов, представленных в Java 8, пожалуйста, прочитайте Java HashMap .