Главная » Java » Интерфейс Collection

0

 

   Как вы могли убедиться, большинство типов коллекций относится к числу расширений интерфейса Collection. Единственным исключением являются типы, производные от интерфейса Map. В этом разделе мы сосредоточим внимание на особенностях интерфейса Collection, а в следующих приведем описание интерфейсов, наследующих Collection, и конкретных реализаций классов коллекций, определенных в пакете java.util, оставляя вопросы, относящиеся к семейству типов Map (их подробное описание вы найдете в разделе 16.7) и технологиям создания новых реализаций итераторов (о них вы узнаете в разделе 16.10) и коллекций (обратитесь к разделу 16.11), "на потом".

   служит основой инфраструктуры типов коллекций Java. На рис. 16.1 показано, что этот интерфейс и интерфейсы, производные от него (такие как Set или List), реализуются большинством типов реальных коллекций. Поэтому Collection — это как раз тот пункт, с которого удобно и целесообразно начинать изучение системы коллекций Java. В составе интерфейса определен ряд описанных ниже основополагающих методов, предназначенных для работы с частными типами коллекций.

public int size()

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

public boolean isEmptyO

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

public boolean contains(Object elem)  B

Возвращает true,  если коллекция содержит элемент elem,  т.е.  еслИ коллекции имеется такой элемент, для которого метод equals, cpa вающий его с элементом elem, возвращает true. Если значение elem равно null, метод возвращает true в том случае, когда в коллекции существует элемент, равный null.

 

public iterator iterator()

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

public Object[]  toArrayO

Возвращает новый массив, содержащий ссылки на все элементы коллекции.

public object[]  toArray(object[]  dest)

Возвращает массив, содержащий ссылки на все элементы коллекции. Если содержимое коллекции умещается в массив dest, оно копируется в dest и массив dest возвращается. Если dest содержит большее число элементов, нежели коллекция, элементы коллекции присваиваются элементам dest, и первый элемент dest, следующий за копией содержимого коллекции, получает значение null, отмечающее границу коллекции. Если объем массива dest не достаточен для хранения содержимого коллекции, создается новый массив того же типа, что и dest, и больший из двух массивов возвращается. Если тип массива dest не совместим с типом элементов коллекции, выбрасывается исключение ArrayStoreException.

public boolean add(object elem)

Проверяет, содержит ли коллекция элемент el em, добавляет его в коллекцию и возвращает true, если при выполнении операции потребовалось изменение коллекции. Если коллекция позволяет хранение одинаковых элементов, метод всегда возвращает true. Если же наличие элементов-дубликатов не допустимо и соответствующий элемент уже присутствует в коллекции, возвращается false. (Реализация метода в производных классах не обязательна.)

public boolean  remove(Object elem)

Удаляет из коллекции один экземпляр элемента elem и возвращает true, если при выполнении операции потребовалось изменение коллекции (т.е. если элемент действительно присутствовал в коллекции). Если значение el em равно null, true возвращается в том случае, когда в составе коллекции существовал элемент пи 11. (Реализация метода в производных классах не обязательна.)

Все методы, проверяющие равенство элементов (такие как contains и remove), пользуются методом equals.

  Вариант метода toArray без параметров возвращает массив типа Object. Для создания массивов иных типов может быть использована версия метода tOArray(Object[]). Если, например, коллекция содержит только элементы типа String, вам, возможно, потребуется создать массив String. Подобной цели легко достичь с помощью следующего фрагмента кода:

String[]   strings = new String[collection.size()];

strings = (String[])collection.toArray(strings);

Обратите внимание на обстоятельства, которые могут сопутствовать присваиванию переменной strings значения, возвращаемого вызовом toArray. Подобная °перация обязана быть безопасной,  но это далеко не так,  если в промежутке вРемени между выполнением инструкции создания массива strings посредством оператора  new и  присваиванием переменной  strings  результата,  возвращаемого методом toArray, размер коллекции увеличивается. Чтобы обеспечить выделение  массиву  strings  фрагмента памяти,  в  точности  соответствующего текущему размеру коллекции, достаточно передать методу toArray пустой массив просто обозначив тип, который требуется возвратить:

String[]   strings  =

    (String[])collection.toArray(new String[0]);

   Некоторые методы интерфейса Collection оперируют с целыми множествами данных других коллекций. Такие методы зачастую более удобны и эффективны.

 

public boolean containsAll(Collection coll)

Возвращает true, если текущая коллекция содержит все элементы коллекции coll.

 public boolean addAll(Collection coll)

Добавляет каждый элемент коллекции coll в текущую коллекцию, возвращая true, если любая операция добавления требует изменения текущей коллекции. (Реализация метода в производных классах не обязательна.)

public boolean  removeAll(Collection coll)

Удаляет каждый элемент коллекции col 1 из текущей коллекции, возвращая  true,   если  любая  операция  удаления  требует  изменения  текущей коллекции. (Реализация метода в производных классах не обязательна.) public boolean  retainAll(Collection coll)

Удаляет из текущей коллекции все элементы, отсутствующие в коллекции coll, возвращая true, если любая операция удаления требует изменения текущей коллекции. (Реализация метода в производных классах не обязательна.)

public void clear ()

Очищает коллекцию, т.е. удаляет все ее элементы. (Реализация метода в

производных классах не обязательна.)

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

 

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

По теме:

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