Главная » Java » Прикладные методы класса Collections

0

 

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

public static object min(collection coll)

Возвращает элемент коллекции coll, обладающий "наименьшим" значением  в соответствии с критерием  естественного упорядочения (natural ordering) элементов этой коллекции.

 public static Object min(Collection coll,  Comparator comp)

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

public static object max(collection coll)

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

 public static object max(collection coll,  comparator comp)

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

 

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

 

public static Comparator  reverseorder()

Возвращает объект Comparator, который обращает естественный порядок сопоставления объектов коллекции, реализующей интерфейс Comparable: так, например, при вызове Collections.reverseorder().compare(ol, о2) будет получено значение, равное -ol. compareTo(o2).

 

 В составе класса Collections имеются методы, предназначенные для работы со списками.

 

public static void  reverse(List list)

Обращает  порядок  размещения  элементов  (изменяет  его  на противоположный) в списке li St.

public static void shuffle(List list)

"Тасует" (shuffle) элементы списка list случайным образом. Все перестановки элементов осуществляются с приблизительно равной вероятностью.

 public static void shuffle(List list,   Random randomsource)

Переставляет элементы списка list случайным образом, используя в качестве источника-генератора случайных чисел объект  randomsource (за сведениями о классе Random обращайтесь к разделу 17.3).

 public static void fill(List list,  Object elem)

                Заменяет каждый элемент списка list значением el em.

public static void copy(List dst,   List src)

Копирует каждый элемент списка-источника src в список-получатель dst. Если список dst слишком мал, чтобы вместить все элементы списка src, выбрасывается исключение типа IndexOutOfBoundsException. В качестве источника и/или получателя возможно задание фрагментов существующих списков (частичных списков).

 

public static List ncopies(int n,   Object elem)

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

  Класс  Collections   содержит  методы,   позволяющие  создавать   единичные (singleton) коллекции, т.е. коллекции, содержащие только один элемент.

public static Set singleton(Object elem)

Возвращает коллекцию-лшожество (set), не допускающую изменения и содержащую единственный элемент elem.

public static  List singletonList(Object elem)

Возвращает коллекцию-список (list), не допускающую изменения и содержащую единственный элемент elem.

public static Map singletonMap(object key,  object value)

Возвращает коллекцию соответствий (map), не допускающую изменения и содержащую единственную пару ключ/значение key/value.

 

Ниже рассмотрены методы сортировки, предлагаемые классом Collections.

 

public static void sort(List list)

Сортирует список list в соответствии с правилом естественного упорядочения его элементов.

public static void sort(List list,   Comparator comp)

Сортирует список list в соответствии с критерием упорядочения, задаваемым объектом соmр.

   А теперь приведем краткое описание методов поиска.

 

 public static int binarySearch(List list,  Object key)

Использует алгоритм бинарного поиска для отыскания в списке list объекта-ключа key и возвращает индекс найденного объекта. Элементы списка должны располагаться в соответствии с правилом естественного упорядочения. Если объект не найден, возвращается отрицательное значение, соответствующее подходящей позиции вероятной вставки объекта.

public static int binarySearch(List list,  Object key, Comparator comp)

Использует алгоритм бинарного поиска для отыскания в списке list объекта-ключа key и возвращает индекс найденного объекта. Элементы списка должны располагаться в соответствии с правилом упорядочения, задаваемым объектом сотр. Если объект не найден, возвращается отрицательное значение, соответствующее подходящей позиции вероятной вставки объекта. Часть  последней  фразы,   "соответствующее  подходящей  позиции  вероятной вставки     объекта",     требует     дополнительных     разъяснений.      Если метод от narySearch не в состоянии найти указанный ключ, всегда возвращается отрицательное значение. Если, в частности, i — это индекс той позиции, на кото-РУю отсутствующий ключ может быть помещен без нарушения общего порядка, Метод возвратит значение -(i+1). (Метод обязан гарантировать, что в том случае, если ключ не найден, должно быть возвращено отрицательное значение, поэтому во избежание возврата нуля — нуль является допустимым значением индекса — к i прибавляется единица.) Таким образом,   методы  binarySearch  не  только осуществляют поиск ключей, но и позволяют поддерживать список в отсортированном виде. Рассмотрим короткий пример:

 

public static void ensureknown(List known, Object value) {

       int indexAt = Collections.binarySearch(known,   value);

       if (indexAt < 0)

       // Объект не найден — его следует вставить в список

       known.add(-(indexAt + 1),   value);

  }

Если объект value отсутствует в списке known, метод обеспечит вставку объекта на позицию, отвечающую критерию естественного упорядочения элементов списка. Если любой из методов сортировки или поиска вызывается по отношению к коллекции, элементы которой взаимно несопоставимы либо не могут быть сопоставлены в соответствии с правилом упорядочения, задаваемым объектом Comparator, выбрасывается исключение типа ClassCastException.

   Можно получить некоторые любопытные эффекты, если применить рассмотренные методы, сочетая их с другими операциями. Так, например, легко построить список, содержащий 100 элементов, инициализированных значением -1 типа Integer:

 

Integer init = new integer(-l);

List values = new ArrayList(collections.nCopies(100,   init));

 

Наконец, в классе Collections объявлены три статических поля: EMPTY_LIST, EMPTY_SET и EMPTY_MAP, — так что, если, скажем, необходимо передать методу подобную пустую коллекцию одного из стандартных типов, ее не придется создавать явно.

 

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

По теме:

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