Map интерфейс

Home » javadoc » Map интерфейс
javadoc, Map, интерфейсы 1 комментарий

Интерфейс Map

AbstractMap – абстрактный класс для реализаций всех карт

Основные свойства интерфейса Map

  1. Map – отображение(некоторые называют картой или картотекой)(mapping-ами содержащимися в Entries называются отображения(mappings) key к value)
  2. Интерфейс Map не является потомком Collection, а следовательно не имплементирует интерфейса Iterable(чтобы перебрать ее с помощью foreach()), также для нее нельзя получить Iterator. Для перебора элементов коллекции используются методы keySet()(получаем список ключей) entrySet(получаем список записей)
  3. Вместо метода add(), Map имеет метод put(), который перетирает значение ассоциированной с ключом если, данный ключ уже имеется

Увы, корявый пока перевод javadocs, попытаюсь его позже привести в порядок =)

Объект, который сопоставляет(maps) ключи к значениям. Отображение не может содержать дубликатов ключей. Каждый ключ может содержать не более одного значения.(ред. Это отражено во вложенном классе Map.Entry). С введением интерфейса Map, полностью абстрактный класс Dictionary считается устаревшим.

Интерфейс Map предоставляет три вида коллекций, которые позволяют содержанию отображений быть отображенными как множество ключей, коллекцию значений или множество отображений ключ-значение. Порядок отображения определен как порядок в котором итераторы отображения перебирают свои элементы. Некоторые имплементации отображений, такие как класс TreeMap, гарантируют порядок; другие, такие как HashMap, -нет.

Замечание: следует внимательно относиться к случаям, когда изменчивые объекты используются в качестве ключей. Поведение отображения невозможно спрогнозировать, если объекты, используемые в качестве ключа, будут меняться и эти изменения будут затрагивать работу их equals() функций. Отдельный случай этого предостережения заключается в том, что отображению не разрешается содержать себя в качестве ключа. Исходя из того, что отображению разрешается содержать себя само в качестве значения, следует предупредить, что в таком случае, методы hashCode() и equals() больше не удовлетворяют требованиям такого отображения.

Все основные классы отображений содержат два “стандартных” конструктора: конструктор без аргументов(void), создающий пустое отображение, и конструктор с одним аргументом типа Map, создающим новое отображение с таким же сопоставлением ключ-значение, как и его аргумент. Как следствие, последний конструктор позволяет сделать копию отображения, эквивалентную желаемому классу. Увы, нет других способов подкрепить эту последнюю рекомендацию(так как интерфейсы не могут содержать конструкторы), но все имплементации Map, реализуют этот конструктор:
(пер. как пример: сигнатура этого конструктора для HashMap:

)

“Деструктивными” методами интерфейса Map, называются методы изменяющие отображение, в котором они вызываются, такие методы выбрасывают UnsupportedOperationException если отображение не поддерживает операцию. В этом случае, такие методы могут, но не обязаны, выбрасывать UnsupportedOperationException, если вызов не возымеет эффекта над отображение.
К примеру, использование метода putAll(Map) применительно к неизменяемому отображению, может(но не обязано), выбрасывать исключение, если отображение, сопоставления(ключ-значение) которого должны быть наложены “поверх” пусто.

Некоторые имплементации Map имеют ограничения возлагаемые на содержащиеся в них ключи и значения. К примеру, в некоторых Map запрещено использование ключей и значений null, а некоторые имеют ограничения по типам ключей. Попытка записи неподходящего ключа или значения выбрасывает unchecked-исключение, как правило, это – NullPointerException или ClassCastException. Попытка запроса на существование неподходящего ключа или значения также может вызвать исключение, ли же просто вернуть false; некоторые имплементации будут демонстрировать одно поведение, другие – другое. В общем и целом, попытка вызова неподходящего ключа или значения расчет которого не приведет к вставке недопустимого элемента в отображение могут вызвать исключение или завершиться успешно, в зависимости от имплементации. Такие исключения помечаются как “опциональные” в спецификациях интерфейсов.

Данный интерфейс является членом фреймворка Java Collections.

Много методов в интерфейсах инфраструктуры коллекций определены в понятиях метода equals. К примеру, спецификация метода containsKey(Object key) гласит: “возвращает истину, только и если только отображение содержит такое сопоставление по ключу, что key==null ? k==null : key.equals(k)”. Эту спецификацию не следует рассматривать, как такую, в которой вызов Map.containsKey с ненулевым аргументом(not-null) ключа(key) будет инициировать key.equals(k) для любой пары key и k.

Имплементации свободны в праве имплементировать оптимизации, поэтому вызовы equals избегаются, к примеру, при первом сравнении хеш-кодов двух ключей. Спецификация Object.hashCode() гарантирует, что объекты с неравными хешкодами не могут быть равными. В общем и целом, имплементации разнообразных интерфейсов инфраструктуры коллекций свободны в получении преимуществ такого поведения базовых методов объекта, там где имплементирующий считает это нужным.

One thought on - Map интерфейс

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

LEAVE A COMMENT