Освой программирование играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Map (Отображение)

В контейнерах Map (отображение) хранятся два объекта: ключ и связанное с ним значение. Иногда используют термин "ассоциативный массив" или "словарь".

Map позволяет искать объекты по ключу. Объект, ассоциированный с ключом, называется значением. И ключи, и значения являются объектами. Ключи могут быть уникальными, а значения могут дублироваться. Некоторые отображения допускают пустые ключи и пустые значения.

Классы для карт:

  • AbstractMap - абстрактный класс, реализующий большую часть интерфейса Map
  • EnumMap - расширяет класс AbstractMap для использования с ключами перечислимого типа enum
  • HashMap - структура данных для хранения связанных вместе пар "ключ-значение", применяется для использования хеш-таблицы
  • TreeMap - для использования дерева, т.е. отображение с отсортированными ключами
  • WeakHashMap - для использования хеш-таблицы со слабыми ключами, отображение со значениями, которые могут удаляться сборщиком мусора, если они больше не используются
  • LinkedHashMap - отображение с запоминанием порядка, в котором добавлялись элементы, разрешает перебор в порядке вставки
  • IdentityHashMap - использует проверку ссылочной эквивалентности при сравнении документов, отображение с ключами, сравниваемыми с помощью операции == вместо метода equals()

Метод toString() выводит содержимое в виде фигурных скобок, где ключи и значения разделяются знаком равенства. Ключи слева, значения справа.

Отображения не поддерживают реализацию интерфейса Iterable, поэтому нельзя перебрать карту через цикл for в форме for-each.

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


interface Map<K, V>

В параметре K указывается тип ключей, в V - тип хранимых значений.

Методы:

  • void clear() - удаляет все пары "ключ-значение" из вызывающего отображения
  • boolean containsKey(Object k) - возвращает значение true, если вызывающее отображение содержит ключ k. В противном случае возвращает false
  • boolean containsValue(Object v) - возвращает значение true, если вызывающее отображение содержит значение v. В противном случае возвращает false
  • Set<Map.Entry<K, V>> entrySet() - возвращает набор, содержащий все значения отображения. Набор содержит объекты интерфейса Map.Entry. Т.е. метод представляет отображение в виде набора
  • boolean equals(Object o) - возвращает значение true, если параметр o - это отображение, содержащее одинаковые значения. В противном случае возвращает false
  • V get(Object k) - возвращает значение, ассоциированное с ключом k. Возвращает значение null, если ключ не найден.
  • int hashCode() - возвращает хеш-код вызывающего отображения
  • boolean isEmpty() - возвращает значение true, если вызывающее отображение пусто. В противном случае возвращает false
  • Set<K> keySet() - возвращает набор, содержащий ключи вызывающего отображения. Метод представляет ключи вызывающего отображения в виде набора
  • V put(K k, V v) - помещает элемент в вызывающее отображение, переписывая любое предшествующее значение, ассоциированное с ключом. Возвращает null, если ключ ранее не существовал. В противном случае возвращается предыдущее значение, связанное с ключом.
  • void putAll(Map<? extends K, ? extends V> m) - помещает все значения из m в отображение
  • V remove(Object k) - удаляет элемент, ключ которого равен k
  • int size() - возвращает количество пар "ключ-значение" в отображении
  • Collection<V> values() - возвращает коллекцию, содержащую значения отображения.

Основные методы - get() и put(), чтобы получить или поместить значения в отображение.

Интерфейс Sortedmap расширяет интерфейс Map и гарантирует, что элементы размещаются в возрастающем порядке значений ключей.

Интерфейс NavigableMap (Java 7) расширяет интерфейс Sortedmap и определяет поведение отображения, поддерживающее извлечение элементов на основе ближайшего соответствия заданному ключу или ключам.

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

HashMap обеспечивает максимальную скорость выборки, а порядок хранения его элементов не очевиден. TreeMap хранит ключи отсортированными по возрастанию, а LinkedHashMap хранит ключи в порядке вставки, но не обеспечивает скорость поиска HashMap.

Реклама