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

Map entry java что это

  • автор:

Что тут происходит 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
408 3 3 серебряных знака 17 17 бронзовых знаков

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

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

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

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

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

Мапы — Java: Коллекции

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

// Создаем новый экземпляр MapString, String> cars = new HashMap<>(); // метод put() добавляет в словарь пару ключ-значение cars.put("O023TO198", "Volvo"); cars.put("O025XE777", "Nissan"); cars.put("O001OO777", "BMW"); System.out.println(cars); // => // Теперь определить марку автомобиля по его номеру значительно проще // метод get() возвращает значение по ключу String modelFromMap = cars.get("O023TO198"); System.out.println(modelFromMap); // "Volvo" System.out.println(cars.get("O025XE700")); // null // key может быть null cars.put(null, "Lada"); System.out.println(cars); // => // замена одного значения на другое cars.put("O025XE777", "Audi"); System.out.println(cars); // => 

Базовые операции с Map

MapString, Integer> people = new HashMap<>(); // Добавление элемента в словарь people.put("Max", 2006); people.put("Petr", 1998); people.put("Ivan", 1981); System.out.println(people); // => System.out.println("Размер Map: " + people.size()); // => Размер Map: 3 MapString, Integer> additionalPeopleMap = new HashMap<>(); additionalPeopleMap.put("Vladimir", 1978); additionalPeopleMap.put("Robert", 2010); additionalPeopleMap.put("Ibrahim", 2011); // Метод putAll() копирует все значения из переданного словаря в текущий people.putAll(additionalPeopleMap); System.out.println(people); // => // Проверка на наличие в словаре ключа System.out.println(people.containsKey("Max")); // => true // и значения System.out.println(people.containsValue(2021)); // => false // Удаление элемента из словаря people.remove("Robert"); System.out.println(people); // => // Удаление всех элементов people.clear(); System.out.println(people); // => <> 

Map.Entry

Map.Entry – это интерфейс, который позволяет нам получить доступ к записям в словаре

MapString, String> students = new HashMap<>(); students.put("Max", "Maximov"); students.put("Petr", "Petrov"); students.put("Ivan", "Ivanov"); System.out.println(students.entrySet()); // => [Max=Maximov, Petr=Petrov, Ivan=Ivanov] // 1 способ получения значения по ключу // for (String s : students.keySet()) // String lastname = students.get(s); // > // 2 cпособ получения значения по ключу - более употребим for (Map.EntryString, String> student: students.entrySet())  System.out.println( "Student name is color: #000000;font-weight: bold">+ student.getKey() + " and student lastname is color: #000000;font-weight: bold">+ student.getValue() ); > 

Коллекции, реализующие интерфейс Map

// Класс LinkedHashMap MapString, String> linkedHashMap = new LinkedHashMap<>(); linkedHashMap.put("Egor", "Yakovlev"); linkedHashMap.put("Max", "Maximov"); linkedHashMap.put("Ivan", "Ivanov"); System.out.println(linkedHashMap); // => // Класс TreeMap MapInteger, ListString>> treeMap = new TreeMap<>(Comparator.reverseOrder()); treeMap.put(23, List.of("Victor", "Ivan")); treeMap.put(18, List.of("Eugene")); treeMap.put(40, List.of("Anna", "Henry", "Igor")); System.out.println(treeMap); // => treeMap.put(35, List.of("Vera")); System.out.println(treeMap); 

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

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

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 и/или его филиалы. Все права защищены.

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

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