Главная » Java » Set и SortedSet

0

 

   Интерфейс Set, будучи расширением Collection, предусматривает уточнение

контрактов существующих методов, но сам по себе новых методов не предлага

Коллекция типа Set не способна содержать одинаковых элементов. Если попытатьс

добавить в множество (set) один и тот же элемент дважды (иными словами, Д

вить объекты, для которых метод equals возвращает true), первая операция

возвратит значение true, но вторая — только false. Если далее аналогичным образом дважды вызвать метод remove, в первом случае remove удалит элемент я

вратит true, поскольку операция потребовала изменения содержимого коллек

но второй вызов вернет false, так как элемент больше не существует. Коллекция-ножество может содержать и не более одного элемента null.       

     Интерфейс SortedSet, производный от Set, привносит в контракт существенные  добавления  —   объект  итератора,   построенный  для   множества, возвращает элементы в строго определенном порядке.  По умолчанию итератор действует в соответствии с правилом естественного упорядочения (natural ordering) элементов множества. Используя реализации SortedSet, предлагаемое в составе пакета java.util, вы сможете также определить объект Comparator, который позволит отступить от исходного правила и задать требуемый порядок следования элементов.

  Концепция упорядочения обусловливает ограничения, накладываемые на природу и содержимое элементов, — элементы множества SortedSet должны быть взаимно сопоставимы. В случае выполнения операций над данными несопоставимых типов (скажем, при попытке добавления объекта Long в упорядоченное множество элементов String либо отыскания всех объектов String, "меньших" заданного значения Long) выбрасывается исключение ClassCastException.

  Интерфейс SortedSet содержит ряд дополнительных методов (они рассмотрены ниже), приобретающих смысл в контексте упорядоченного множества элементов, public Comparator comparator()

Возвращает объект Comparator, используемый текущим множеством SortedSet, либо null, если множество подчиняется правилу естественного упорядочения.

public Object firstO

Возвращает первый ("наименьший") объект множества.

public Object lastO

Возвращает последний ("наибольший") объект множества.

public SortedSet subSet(Object min,  Object max)

Возвращает подмножество, или курсор (view), текущего множества, значения всех элементов которого "больше" или равны mi n и "меньше" max. Содержимое курсора поддерживается коллекцией в актуальном состоянии: изменения, вносимые в коллекцию и касающиеся элементов, которые принадлежат диапазону курсора, "видимы" посредством курсора, и обратное утверждение также справедливо. Если значение mi n превосходит max либо текущее множество в свою очередь является курсором другого множества и значения mi n и max лежат за пределами диапазона курсора более высокого уровня, выбрасывается исключение типа illegalArgumentException. To же исключение будет получено при попытке внесения в содержимое курсора таких изменений, которые касаются элементов, не принадлежащих диапазону курсора.

 

Public SortedSet headset(Object max)

Возвращает начальное (head) подмножество, или курсор, текущего множества, значения всех элементов которого "меньше" max. Содержимое курсора поддерживается коллекцией в актуальном состоянии точно так же, тсак и в случае создания курсора с помощью subset. Метод headset и методы объекта-курсора выбрасывают те же исключения, которые упомянуты в описании subset.

Public SortedSet tailset(Object min)

Возвращает завершающее (tail) подмножество, или курсор, текущего множества, значения всех элементов которого "больше" или равны min. Содержимое курсора поддерживается коллекцией в актуальном состоянии точно так же, как и в случае создания курсора с помощью subset. Метод tail Set и методы объекта-курсора выбрасывают те же исключения, которые упомянуты в описании subset.

 

   Поддержка курсоров в актуальном состоянии,  обеспечиваемая коллекцц ей,   весьма   важна   и   служит   основой   функционирования   многих   методов Подмножества   данных,   возвращаемые   такими   методами,   как,   например subset,   headset   или   tail Set,   не  являются   моментальными   снимками (snapshots)   части   коллекции —   они   непосредственно   связаны   с   исходным множеством и по существу являются фильтрами его содержимого. Состояние курсора остается актуальным независимо от того, посредством какого объекта —  коллекции  как  таковой  или  курсора —  подвергается  изменениям содержимое множества.  Если же все-таки необходимо создать моментальный снимок данных, этого можно добиться копированием курсора:

 

public SortedSet copyHead(SortedSet set,  Object max)   {

  SortedSet head = set.headset(max);

   return new TreeSet(head);   // копия содержимого head

}

Здесь демонстрируется использование конструктора копии (copy constructor), каковые предлагаются в большинстве конкретных реализаций коллекций, с целью создания новой коллекции, элементы которой "наследуют" содержимое коллекции, переданной конструктору в виде параметра.

   Пакет java.util содержит конкретные реализации интерфейсов Set -и SortedSet, готовые для практического использования, — речь идет о классах HashSet и TreeSet, описанию которых посвящены два следующих раздела.

 

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

По теме:

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