Map entry java что это
Перейти к содержимому

Map entry java что это

  • автор:

Map entry java что это

Интерфейс Map представляет отображение или иначе говоря словарь, где каждый элемент представляет пару «ключ-значение». При этом все ключи уникальные в рамках объекта Map. Такие коллекции облегчают поиск элемента, если нам известен ключ — уникальный идентификатор объекта.

Следует отметить, что в отличие от других интерфейсов, которые представляют коллекции, интерфейс Map НЕ расширяет интерфейс Collection.

Среди методов интерфейса Map можно выделить следующие:

  • void clear() : очищает коллекцию
  • boolean containsKey(Object k) : возвращает true, если коллекция содержит ключ k
  • boolean containsValue(Object v) : возвращает true, если коллекция содержит значение v
  • Set> entrySet() : возвращает набор элементов коллекции. Все элементы представляют объект Map.Entry
  • boolean equals(Object obj) : возвращает true, если коллекция идентична коллекции, передаваемой через параметр obj
  • boolean isEmpty : возвращает true, если коллекция пуста
  • V get(Object k) : возвращает значение объекта, ключ которого равен k. Если такого элемента не окажется, то возвращается значение null
  • V getOrDefault(Object k, V defaultValue) : возвращает значение объекта, ключ которого равен k. Если такого элемента не окажется, то возвращается значение defaultVlue
  • V put(K k, V v) : помещает в коллекцию новый объект с ключом k и значением v. Если в коллекции уже есть объект с подобным ключом, то он перезаписывается. После добавления возвращает предыдущее значение для ключа k, если он уже был в коллекции. Если же ключа еще не было в коллекции, то возвращается значение null
  • V putIfAbsent(K k, V v) : помещает в коллекцию новый объект с ключом k и значением v, если в коллекции еще нет элемента с подобным ключом.
  • Set keySet() : возвращает набор всех ключей отображения
  • Collection values() : возвращает набор всех значений отображения
  • void putAll(Map map) : добавляет в коллекцию все объекты из отображения map
  • V remove(Object k) : удаляет объект с ключом k
  • int size() : возвращает количество элементов коллекции

Чтобы положить объект в коллекцию, используется метод put , а чтобы получить по ключу — метод get . Реализация интерфейса Map также позволяет получить наборы как ключей, так и значений. А метод entrySet() возвращает набор всех элементов в виде объектов Map.Entry .

Обобщенный интерфейс Map.Entry представляет объект с ключом типа K и значением типа V и определяет следующие методы:

  • boolean equals(Object obj) : возвращает true, если объект obj, представляющий интерфейс Map.Entry , идентичен текущему
  • K getKey() : возвращает ключ объекта отображения
  • V getValue() : возвращает значение объекта отображения
  • V setValue(V v) : устанавливает для текущего объекта значение v
  • int hashCode() : возвращает хеш-код данного объекта

При переборе объектов отображения мы будем оперировать этими методами для работы с ключами и значениями объектов.

Классы отображений. HashMap

Базовым классом для всех отображений является абстрактный класс AbstractMap , который реализует большую часть методов интерфейса Map. Наиболее распространенным классом отображений является HashMap , который реализует интерфейс Map и наследуется от класса AbstractMap.

Пример использования класса:

import java.util.*; public class Program < public static void main(String[] args) < Mapstates = new HashMap(); states.put(1, "Germany"); states.put(2, "Spain"); states.put(4, "France"); states.put(3, "Italy"); // получим объект по ключу 2 String first = states.get(2); System.out.println(first); // получим весь набор ключей Set keys = states.keySet(); // получить набор всех значений Collection values = states.values(); //заменить элемент states.replace(1, "Poland"); // удаление элемента по ключу 2 states.remove(2); // перебор элементов for(Map.Entry item : states.entrySet()) < System.out.printf("Key: %d Value: %s \n", item.getKey(), item.getValue()); >Map people = new HashMap(); people.put("1240i54", new Person("Tom")); people.put("1564i55", new Person("Bill")); people.put("4540i56", new Person("Nick")); for(Map.Entry item : people.entrySet()) < System.out.printf("Key: %s Value: %s \n", item.getKey(), item.getValue().getName()); >> > class Person < private String name; public Person(String value)< name=value; >String getName() >

Чтобы добавить или заменить элемент, используется метод put, либо replace, а чтобы получить его значение по ключу — метод get. С помощью других методов интерфейса Map также производятся другие манипуляции над элементами: перебор, получение ключей, значений, удаление.

Map entry java что это

Запись карты (пара ключ/значение). Метод Map.entrySet возвращает представление набора карты, элементы которой имеют этот класс. Единственный способ получить ссылку на запись карты от iterator этого представления набора. Эти объекты Map.Entry допустимы только для продолжительности итерации; более формально поведение записи карты неопределено, если отступающая карта была изменена после того, как запись была возвращена iterator, кроме через работу setValue на записи карты.

Сводка метода

Методы

Модификатор и Тип Метод и Описание
boolean equals(Object o)

Сравнивает указанный объект с этой записью для равенства.
Возвращает ключ, соответствующий этой записи.
Возвращает значение, соответствующее этой записи.
Возвращает значение хэш-кода для этой записи карты.
Заменяет значение, соответствующее этой записи с указанным значением (дополнительная работа).

Деталь метода

getKey
K getKey()

Возвращает ключ, соответствующий этой записи.

getValue
V getValue()

Возвращает значение, соответствующее этой записи. Если отображение было удалено из отступающей карты (работой remove iterator), результаты этого вызова неопределены.

setValue
V setValue(V value)

Заменяет значение, соответствующее этой записи с указанным значением (дополнительная работа). (Записи через к карте.) Поведение этого вызова неопределено, если отображение было уже удалено из карты (работой remove iterator).

равняется

Сравнивает указанный объект с этой записью для равенства. Возвраты true, если данный объект является также записью карты и этими двумя записями, представляют то же самое отображение. Более формально две записи e1 и e2 представляют то же самое отображение если

(e1.getKey()==null ? e2.getKey()==null : e1.getKey().equals(e2.getKey())) && (e1.getValue()==null ? e2.getValue()==null : e1.getValue().equals(e2.getValue()))

Это гарантирует, что метод equals работает должным образом через различные реализации интерфейса Map.Entry.

хэш-код
int hashCode()

Возвращает значение хэш-кода для этой записи карты. Хэш-код записи карты e определяется, чтобы быть:

(e.getKey()==null ? 0 : e.getKey().hashCode()) ^ (e.getValue()==null ? 0 : e.getValue().hashCode())

Это гарантирует, что e1.equals(e2) подразумевает что e1.hashCode()==e2.hashCode() для любых двух Записей e1 и e2, как требуется согласно общему контракту Object.hashCode.

Платформа Java™
Стандарт Эд. 7

Представьте ошибку или функцию
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE . Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.

31.6. Java – Интерфейс Map.Entry

Интерфейс Map.Entry в Java позволяет работать с записями Map.

Метод entrySet(), объявленный интерфейсом Map, возвращает Set, содержащий записи Map. Каждый из этих элементов является объектом Map.Entry.

В следующей таблице приведены методы, объявленные этим интерфейсом:

Методы

Методы и описание
1 boolean equals(Object obj)
Возвращает true, если obj — это Map.Entry, чей ключ и значение равны значению вызывающего объекта.
2 Object getKey( )
Возвращает ключ для этой записи в Map.
3 Object getValue( )
Возвращает значение для этой записи в Map.
4 int hashCode( )
Возвращает хэш-код для этой записи в Map.
5 Object setValue(Object v)
Устанавливает значение v для этой записи Map. Вызывается ClassCastException, если v не является правильным типом для Map. A Исключение NullPointerException выдается, если v является нулём, а Map не разрешает нулевые ключи. Исключение UnsupportedOperationException возникает, если карта не может быть изменена.

Пример

Ниже приведен пример, показывающий, как можно использовать Map.Entry:

import java.util.*; public class HashMapDemo < public static void main(String args[]) < // Создаём хэш-карту HashMap hm = new HashMap(); // Кладём элементы в Map hm.put("Зоя", new Double(3434.34)); hm.put("Марк", new Double(123.22)); hm.put("Аня", new Double(1378.00)); hm.put("Маргарита", new Double(99.22)); hm.put("Михаил", new Double(-19.08)); // Получаем набор элементов Set set = hm.entrySet(); // Получаем итератор Iterator i = set.iterator(); // Отображение элементов while(i.hasNext()) < Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); >System.out.println(); // Вносим 1000 на счёт Зои double balance = ((Double)hm.get("Зоя")).doubleValue(); hm.put("Зоя", new Double(balance + 1000)); System.out.println("Новый баланс Зои: " + hm.get("Зоя")); > > 

Получим следующий результат:

Маргарита: 99.22 Аня: 1378.0 Зоя: 3434.34 Михаил: -19.08 Марк: 123.22 Новый баланс Зои: 4434.34 

Оглавление

  • 1. Java – Самоучитель для начинающих
  • 2. Java – Обзор языка
  • 3. Java – Установка и настройка
  • 4. Java – Синтаксис
  • 5. Java – Классы и объекты
  • 6. Java – Конструкторы
  • 7. Java – Типы данных и литералы
  • 8. Java – Типы переменных
  • 9. Java – Модификаторы
  • 10. Java – Операторы
  • 11. Java – Циклы и операторы цикла
  • 11.1. Java – Цикл while
  • 11.2. Java – Цикл for
  • 11.3. Java – Улучшенный цикл for
  • 11.4. Java – Цикл do..while
  • 11.5. Java – Оператор break
  • 11.6. Java – Оператор continue
  • 12. Java – Операторы принятия решений
  • 12.1. Java – Оператор if
  • 12.2. Java – Оператор if..else
  • 12.3. Java – Вложенный оператор if
  • 12.4. Java – Оператор switch..case
  • 12.5. Java – Условный оператор (? 🙂
  • 13. Java – Числа
  • 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
  • 13.2. Java – Метод compareTo()
  • 13.3. Java – Метод equals()
  • 13.4. Java – Метод valueOf()
  • 13.5. Java – Метод toString()
  • 13.6. Java – Метод parseInt()
  • 13.7. Java – Метод Math.abs()
  • 13.8. Java – Метод Math.ceil()
  • 13.9. Java – Метод Math.floor()
  • 13.10. Java – Метод Math.rint()
  • 13.11. Java – Метод Math.round()
  • 13.12. Java – Метод Math.min()
  • 13.13. Java – Метод Math.max()
  • 13.14. Java – Метод Math.exp()
  • 13.15. Java – Метод Math.log()
  • 13.16. Java – Метод Math.pow()
  • 13.17. Java – Метод Math.sqrt()
  • 13.18. Java – Метод Math.sin()
  • 13.19. Java – Метод Math.cos()
  • 13.20. Java – Метод Math.tan()
  • 13.21. Java – Метод Math.asin()
  • 13.22. Java – Метод Math.acos()
  • 13.23. Java – Метод Math.atan()
  • 13.24. Java – Метод Math.atan2()
  • 13.25. Java – Метод Math.toDegrees()
  • 13.26. Java – Метод Math.toRadians()
  • 13.27. Java – Метод Math.random()
  • 14. Java – Символы
  • 14.1. Java – Метод Character.isLetter()
  • 14.2. Java – Метод Character.isDigit()
  • 14.3. Java – Метод Character.isWhitespace()
  • 14.4. Java – Метод Character.isUpperCase()
  • 14.5. Java – Метод Character.isLowerCase()
  • 14.6. Java – Метод Character.toUpperCase()
  • 14.7. Java – Метод Character.toLowerCase()
  • 14.8. Java – Метод Character.toString()
  • 15. Java – Строки
  • 15.1. Java – Метод charAt()
  • 15.2. Java – Метод compareTo()
  • 15.3. Java – Метод compareToIgnoreCase()
  • 15.4. Java – Метод concat()
  • 15.5. Java – Метод contentEquals()
  • 15.6. Java – Метод copyValueOf()
  • 15.7. Java – Метод endsWith()
  • 15.8. Java – Метод equals()
  • 15.9. Java – Метод equalsIgnoreCase()
  • 15.10. Java – Метод getBytes()
  • 15.11. Java – Метод getChars()
  • 15.12. Java – Метод hashCode()
  • 15.13. Java – Метод indexOf()
  • 15.14. Java – Метод intern()
  • 15.15. Java – Метод lastIndexOf()
  • 15.16. Java – Метод length()
  • 15.17. Java – Метод matches()
  • 15.18. Java – Метод regionMatches()
  • 15.19. Java – Метод replace()
  • 15.20. Java – Метод replaceAll()
  • 15.21. Java – Метод replaceFirst()
  • 15.22. Java – Метод split()
  • 15.23. Java – Метод startsWith()
  • 15.24. Java – Метод subSequence()
  • 15.25. Java – Метод substring()
  • 15.26. Java – Метод toCharArray()
  • 15.27. Java – Метод toLowerCase()
  • 15.28. Java – Метод toString()
  • 15.29. Java – Метод toUpperCase()
  • 15.30. Java – Метод trim()
  • 15.31. Java – Метод valueOf()
  • 15.32. Java – Классы StringBuilder и StringBuffer
  • 15.32.1. Java – Метод append()
  • 15.32.2. Java – Метод reverse()
  • 15.32.3. Java – Метод delete()
  • 15.32.4. Java – Метод insert()
  • 15.32.5. Java – Метод replace()
  • 16. Java – Массивы
  • 17. Java – Дата и время
  • 18. Java – Регулярные выражения
  • 19. Java – Методы
  • 20. Java – Потоки ввода/вывода, файлы и каталоги
  • 20.1. Java – Класс ByteArrayInputStream
  • 20.2. Java – Класс DataInputStream
  • 20.3. Java – Класс ByteArrayOutputStream
  • 20.4. Java – Класс DataOutputStream
  • 20.5. Java – Класс File
  • 20.6. Java – Класс FileReader
  • 20.7. Java – Класс FileWriter
  • 21. Java – Исключения
  • 21.1. Java – Встроенные исключения
  • 22. Java – Вложенные и внутренние классы
  • 23. Java – Наследование
  • 24. Java – Переопределение
  • 25. Java – Полиморфизм
  • 26. Java – Абстракция
  • 27. Java – Инкапсуляция
  • 28. Java – Интерфейсы
  • 29. Java – Пакеты
  • 30. Java – Структуры данных
  • 30.1. Java – Интерфейс Enumeration
  • 30.2. Java – Класс BitSet
  • 30.3. Java – Класс Vector
  • 30.4. Java – Класс Stack
  • 30.5. Java – Класс Dictionary
  • 30.6. Java – Класс Hashtable
  • 30.7. Java – Класс Properties
  • 31. Java – Коллекции
  • 31.1. Java – Интерфейс Collection
  • 31.2. Java – Интерфейс List
  • 31.3. Java – Интерфейс Set
  • 31.4. Java – Интерфейс SortedSet
  • 31.5. Java – Интерфейс Map
  • 31.6. Java – Интерфейс Map.Entry
  • 31.7. Java – Интерфейс SortedMap
  • 31.8. Java – Класс LinkedList
  • 31.9. Java – Класс ArrayList
  • 31.10. Java – Класс HashSet
  • 31.11. Java – Класс LinkedHashSet
  • 31.12. Java – Класс TreeSet
  • 31.13. Java – Класс HashMap
  • 31.14. Java – Класс TreeMap
  • 31.15. Java – Класс WeakHashMap
  • 31.16. Java – Класс LinkedHashMap
  • 31.17. Java – Класс IdentityHashMap
  • 31.18. Java – Алгоритмы Collection
  • 31.19. Java – Iterator и ListIterator
  • 31.20. Java – Comparator
  • 32. Java – Дженерики
  • 33. Java – Сериализация
  • 34. Java – Сеть
  • 34.1. Java – Обработка URL
  • 35. Java – Отправка Email
  • 36. Java – Многопоточность
  • 36.1. Java – Синхронизация потоков
  • 36.2. Java – Межпоточная связь
  • 36.3. Java – Взаимная блокировка потоков
  • 36.4. Java – Управление потоками
  • 37. Java – Основы работы с апплетами
  • 38. Java – Javadoc

Что тут происходит Set> entrySet()?

Суть полиморфизма состоит в том, что за некоторым интерфейсом, можно скрыть детали реализации.

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

public interface Stack

Какие реализации можно предложить? На самом деле их множество, можно использовать ArrayList , можно использовать массив, если мы, допустим, знаем максимальный размер. Возможно вы захотите использовать LinkedList . Однако задайте вопрос, при использовании стека вам нужно знать какая именно реализация скрывается за этим интерфейсом? Скорее всего нет, вы просто знаете, что есть методы add и pop , а как элементы расположатся в памяти, вас не волнует. Вы просто используете стек.

public static void main(String[] args) < Stackstack = new MyStackLinkedList(); processing(stack); Stack stack2 = new MyStackArrayList(); processing(stack); > //метод не знает, какая именно реализация используется, но ему достаточно знать об add и pop public static void processing(Stack stack)

Также и в случае Map.Entry , конкретная реализация скрыта, вдруг мы поймём как оптимизировать HashMap в будущем, для обратной совместимости всех продуктов, нам будет достаточно изменить или написать новую реализацию Node , но весь остальной код, менять не придётся.

Отслеживать
ответ дан 4 мая 2021 в 10:02
12.1k 2 2 золотых знака 25 25 серебряных знаков 47 47 бронзовых знаков

var test = new HashMap(); Map.Entry ptr = (Map.Entry) test; Так не будет работать( примерно понял, но где то что то не понимаю.

4 мая 2021 в 10:37
hashmap не реализует интерфейс Map.Entry, Node реализует.
4 мая 2021 в 17:30

EntrySet — это значения Map (тоесть ключ-значение). Каждая пара ключ-значение представляет собой Entry. Что вообще такое map — это ассоциативный массив, в котором (конкретно в реализации HashMap) по хешу ключа ищется значение. Если возникла коллизия и хеш коды ключей совпадают, значения по этому хешу складываются в односвязный список (до 8 элементов, потом превращается в красно черное дерево, но при норм определении хеш функции такое не происходит, плюс loadfactor частично предотвращает такие ситуэйшн, кароче мелочей много и мы их пока опустим) Но как мы видим, Set и Map это разные коллекции, но не концептуально. Дело в том, что Set под капотом использует Map — наш ассоциативный массив, только в качестве значений он оставляет null. Поэтому, если мы говорим о реализации HashSet в java и почему эта структура данных работает за постоянное O(1) время (при извлечении ключа), то это тот же ассоциативный масчив — Entry, просто ключ — уникальное K, а V — null, и когда мы просим отдать нам такой-то элемент, он заранее знает, на каком индексе он лежит (он вызывает функцию hashCode() класса Object и по модулю деления на длину этого массива определяет на какой ячейке он лежит — тоесть, допустим, hashCode вернул 31, а начальная емность HashSet у нас 16 — > значит мы делаем 31%16=15(остаток от деления). В 15 ячейке нашего массива и лежит наш элемент. И, когда мы его достаем, мы его не ищем, а тупо к нему обращаемся, отсюда и скорость работы)

Но если подвести итоги — то Set просто под капотом юзает Map (обратите внимание, map не реализует iterable, в отличие от set, но getValues() и getKeys() методы мапы реализуют)

Отслеживать
ответ дан 4 мая 2021 в 10:08
388 1 1 серебряный знак 17 17 бронзовых знаков

  • java
  • интерфейс
  • java-hashmap
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *