Главная » Java » Map и sortedMap

0

 

   Интерфейс Map не является расширением интерфейса Collection, поскольку следует контракту, отличному от контракта Collection во многих важных аспектах. Основное отличие состоит в том, что коллекция Map предназначена для хранения пар данных вида ключ/значение (key/value) и позволяет осуществлять поиск значений по заданным ключам. Каждый ключ поддерживает соответствие (тар) не более чем одному значению, а каждое значение, в свою очередь, способно соответствовать любому количеству ключей. Структура данных ключ/значение может быть применена, например, для задания связи между фамилией человека и адресом его проживания. Если в коллекции имеется адрес, отвечающий фамилии, значение адреса должно быть уникальным. В то же время по указанному адресу могут проживать несколько людей, так что объект коллекции вернет одно и то же значение адреса для нескольких ключей-фамилий.

Ниже описаны базовые методы интерфейса Map.

 

public int size()

Возвращает размер коллекции соответствий, т.е. количество хранящихся в ней пар ключ/значение. Возвращаемое значение ограничено сверху величиной Integer.MAX_VALUE — даже в том случае, если в коллекции хранится большее число элементов-пар.

public boolean isEmpty()

Возвращает true, если коллекция пуста.

public boolean containskey(Object key)

Возвращает  true,   если  коллекция  содержит  значение  для  заданного

 ключа key.

public boolean containsValue(Object value)

Возвращает true, если коллекция содержит по меньшей мере один экземпляр заданного значения value.

public Object get(Object key)

Возвращает объект-зкачекие, которому соответствует заданный ключ key, бо null, если соответствие не найдено; null может быть возвращено также том случае, если коллекция допускает хранение значений null  и ключ явно указывает на null. Чтобы различить названные ситуации, можно пользоваться методом ContainsKey, хотя такой подход чреват дополните ными вычислительными затратами. Более эффективное решение, позволящее избежать необходимости выполнения лишних проверок, связано с ис зованием вместо значений null пустых объектов-маркеров.

 

 

public Object put(Object key,  Object value)

Устанавливает соответствие между объектом-ключом key и объектом-значением value в текущей коллекции. Если коллекция уже содержит значение, соответствующее key, значение возвращается и заменяется в коллекции содержимым параметра value. Если в коллекции нет пары key/value, та помещается в коллекцию, и возвращается null; метод может вернуть null ив том случае, если ключ key прежде существовал и ссылался на значение null (Реализация метода в производных классах не обязательна.)

public Object  remove(Object key)

Удаляет из коллекции соответствие для заданного ключа key. Возвращаемое значение обладает той же семантикой, что и в случае метода put. (Реализация метода в производных классах не обязательна.)

public void putAll(Map otherMap)

Помещает в коллекцию содержимое другой коллекции OtherMap. (Реализация метода в производных классах не обязательна.)

public void clear()

Очищает коллекцию, удаляя из нее все пары соответствий.

 

  Методы, которым в качестве параметров передаются ключи, способны выбрасывать исключение ClassCastException, если тип ключа не соответствует типу, принятому в текущей коллекции, и исключение Nul I PointerExcept;ion, если ключ равен null, а коллекция не позволяет помещать в нее подобные ключи.

  Как нетрудно видеть, хотя Map и не наследует интерфейс Collection, методы обоих типов, имеющие целью выполнение одних и тех же операций, обладают одинаковыми именами, а методы, схожие по смыслу, родственны и по названию. Это помогает запомнить назначение методов и способы их применения.

  Можно ожидать, что реализации Map должны быть оптимизированы для осуществления операций поиска значений по ключам. Например, метод containsKey в применении к крупным коллекциям окажется намного более эффективным, нежели containsvalue. Производительность метода containsKey класса HashMap оценивается функцией О(1), в то время как containsvalue обладает быстродействием, соизмеримым с О(n), — ключ отыскивается по значению хеш-кода, но для поиска значения придется последовательно проверять каждый элемент до тех пор, пока совпадение не будет найдено.

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

 

 Public set keyset()

Возвращает объект Set, элементами которого служат ключи текущей коллекции соответствий.

Public collection values()

Возвращает объект Collection,  элементами которого служат значения текущей коллекции соответствий.

 Public set entryset()

Возвращает объект Set, элементами которого служат объекты типа Map. Entry, представляющие отдельные пары соответствий (map entry) текущей коллекции. Map. Entry (см. ниже) — это вложенный интерфейс, обладающий методами, которые позволяют манипулировать парами соответствий.

 

Коллекции, возвращаемые тремя названными методами, поддерживаются в ак туальном состоянии исходной коллекцией соответствий Map, поэтому, например при   удалении   элемента   любой   из   таких   коллекций   соответствующая   пара ключ/значение будет удалена и из объекта Map. Добавлять в коллекции новые элементы запрещено — подобные методы коллекциями в данном случае не поддерживаются. При выполнении параллельной итерации по коллекциям ключей и значений надеяться на получение корректной пары ключ /значение, вообще говоря, нельзя, поскольку итераторы могут возвращать элементы коллекций в любом порядке. Если необходимы гарантии отыскания верных пар, следует прибегнуть к помощи метода entrySet.

   Интерфейс Map. Entry определяет методы, позволяющие манипулировать парами ключ/значение, представленными в том виде, в каком они возвращаются методом entrySet интерфейса Map.

 

public Object getKey()

Возвращает ключ для текущего объекта пары соответствий ключ/значение.

public Object getvalue()

Возвращает     значение     для     текущего     объекта     пары     соответствий ключ/значение.

 public Object setvalue(Object value)

Устанавливает новое значение value для текущего объекта пары соответствий ключ/значение и возвращает старое значение.

Обратите внимание на отсутствие метода setKey — чтобы изменить ключ, требуется удалить существующее соответствие для ключа и добавить новое.

   Интерфейс SortedMap расширяет интерфейс Map и уточняет контракт последнего в предположении, что ключи должны быть отсортированы. Упорядочение ключей оказывает влияние на взаимное расположение элементов в коллекциях, возвращаемых методами keyset, values и entrySet. Помимо того, интерфейс SortedMap содержит ряд дополнительных методов (они рассмотрены ниже), приобретающих смысл в контексте упорядоченной коллекции соответствий.

 

public Comparator comparator( )

Возвращает объект Comparator, используемый для сортировки содержимого текущей коллекции соответствий, и null, если таковой не используется; последнее означает, что содержимое коллекции отсортировано по правилу естественного упорядочения (natural ordering) объектов-ключей.

public Object firstKey( )

Возвращает первый ("наименьший") ключ в текущей коллекции соответствий.

public Object lastKey( )

Возвращает последний ("наибольший") ключ в текущей коллекции соответствий.

public SortedMap subMap(object minkey,  Object mахкеу)

Возвращает фрагмент коллекции, или курсор (view), величины ключей ко торого "больше" или равны minkey и "меньше" maxkey.

public SortedMap headMap(object тахкеу)

Возвращает начальный (head) фрагмент коллекции, или курсор, величи ключей которого "меньше" mахкеу.

 

public SortedMap tailMap(Object minKey)

Возвращает завершающий (tail) фрагмент коллекции, или курсор, величины ключей которого "больше" minkey.

Любой из возвращаемых курсоров поддерживается исходной коллекцией соответствий в актуальном состоянии, т.е. изменения, внесенные в исходную коллекцию, "видимы" посредством курсора, и наоборот.

  SortedMap для Map — это то же самое, что и SortedSet для Set; SortedMap обеспечивает почти аналогичные функциональные возможности — за исключением того, что работает с ключами. Исключения, выбрасываемые методами интерфейса SortedMap, аналогичны тем, которые генерируются методами SortedSet.

  Пакет java.util предлагает три конкретные реализации коллекций соответствий: HashMap, тгеемар и weakHashMap.

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии