Главная страница

Java. Полное руководство. 8-е издание. С. Н. Тригуб Перевод с английского и редакция


Скачать 25.04 Mb.
НазваниеС. Н. Тригуб Перевод с английского и редакция
АнкорJava. Полное руководство. 8-е издание.pdf
Дата28.02.2017
Размер25.04 Mb.
Формат файлаpdf
Имя файлаJava. Полное руководство. 8-е издание.pdf
ТипДокументы
#3236
страница39 из 90
1   ...   35   36   37   38   39   40   41   42   ...   90
void cl o s e () throws Этот метод закрывает вызывающий объект, освобождая любые ресурсы, которые он мог занимать. Он автоматически вызывается в конце оператора t r y -
Глава 16. Пакет java.lang
4 7 с ресурсами избавляя, таким образом, от необходимости явно вызывать метод close ()
. Интерфейс
AutoCloseable реализуется несколькими классами, включая все классы ввода-вывода, открывающие поток, который может быть закрыт.
Интерфейс
Thread. Статический интерфейс
Thread.UncaughtExceptionHandler реализуется классами, которые хотят обрабатывать необработанные исключения. Его реализует класс
ThreadGroup. В этом интерфейсе объявлен только один приведенный ниже метод uncaughtException(Thread поток

исключение)
Здесы тоток—это ссылка на поток, который создал исключение, з. исключение это ссылка на исключение.
Вложенные пакеты
java. В языке Java определено несколько пакетов, вложенных в пакет j ava.
Каждый из них кратко описан ниже.
П акет
j a v a . l a n g . a n n o t a t i o Средства аннотирования языка Java поддерживаются с помощью пакета j ava.
lang.
annotation. В этом пакете определен интерфейса также перечисления
ElementType и
RetentionPolicy. Интерфейс описан в главе Пакет Этот пакет определяет средства, которые могут быть использованы для добавления инструментария для разных аспектов выполнения программ. Он определяет интерфейсы
Instrumentation и
ClassFileTransformer, а также класс Пакет Добавленный в комплект JDK 7, пакет java.
lang .
invoke поддерживает динамические языки. Он содержит такие классы, как
CallSite, MethodHandle и
MethodType.
и 7 Часть II. Библиотека Пакет j a v a . l a n g . m anagem Этот пакет предоставляет поддержку управления виртуальной машиной Java и исполняющим окружением. Используя средства пакета j a v a . la n g .m a n a g e m e n t, вы можете просматривать различные аспекты выполнения программы и управлять ими.
П акет j a v a . l a n g . r e Ранее уже упоминалось, что средства сбора мусора в языке Java автоматически определяют, когда не остается ссылок на объект. Затем предполагается, что этот объект более ненужен и занятую им память можно утилизировать. Классы пакета j a v a . l a n g . r e f предлагают более тонкие возможности управления процессом сбора “мусора”.
П акет j a v a . l a n g . r e f l e c Рефлексия (reflection) — это свойство программы анализировать код вовремя выполнения. Пакет j a v a . l a n g . r e f l e c t позволяет получать информацию о полях, конструкторах, методах и модификаторах класса. Помимо других причин, эта информация может понадобиться для создания программных инструментов, которые позволяют работать с компонентами Java Beans. Инструмент использует рефлексию для динамического определения характеристик компонента. Рефлексия была представлена в главе 12 и также рассматривается в главе Пакет j a v a . l a n g . r e f 1 e c t определяет несколько классов, включая классы
M eth o d , F i e l d и
C o n s t r u c t o r . Также этот пакет содержит несколько интерфейсов, в числе которых
A n n o t a t e d E le m e n t , M ember и Туре. В дополнение пакет j a v a . l a n g . r e f l e c t включает класс
A r r a y , позволяющий динамически создавать массивы и оперировать ими
ГЛАВА 4 - С Пакет j a v a . u t i l : инфраструктура
Collections Настоящая глава посвящена классами интерфейсам, определенным в пакете j a v a . u t i l . Этот важный пакет содержит большой ассортимент классов и интерфейсов, поддерживающих широкий диапазон функциональных возможностей. Например, пакет j a v a . u t i l включает классы, создающие псевдослучайные числа, управляющие датами и временем, просмотром событий, манипулирующие наборами битов, разбирающие строки и управляющие форматированными данными. Пакет j a v a . u t i l также включает одну из наиболее мощных подсистем
Java — коллекции. Инфраструктура коллекций — это сложная иерархия интерфейсов и классов, предоставляющих изящную технологию управления группами объектов. Она заслуживает пристального внимания всех программистов.
Поскольку пакет j a v a . u t i l содержит широкий диапазон функциональных возможностей, он достаточно объемный. Ниже приведен список основных его классов b s t r a c t e d

lection
EventObj ect
PropertyResourceBundle
AbstractList
FormattableFlags
Random
AbstractMap
Formatter
ResourceBundle
AbstractQueue
GregorianCalendar
Scanner
AbstractSequentialList
HashMap
ServiceLoader
AbstractSet
HashSet
SimpleTimeZone
ArrayDeque
Hashtable
Stack
ArrayList
IdentityHashMap
StringTokenizer
Arrays
LinkedHashMap
Timer
BitSet
LinkedHashSet
TimerTask
Calendar
LinkedList
TimeZone
Collections
ListResourceBundle
TreeMap
Currency
Locale
TreeSet
Date
Obj ects Добавлено в JDK В пакете j a v a . u t i l определены следующие интерфейсы Deque
Map
Set
Часть II. Библиотека Java
Enumeration
M a p .Entry
SortedMap
EventListener
NavigableMap
SortedSet
Formattable
NavigableSet
Iterator
Observer
Из-за большого размера пакета java.util его описание разделено на две главы. Эта глава посвящена средствам инфраструктуры коллекций Collections
Framework пакета j ava.
util. В главе 18 рассматриваются остальные классы и интерфейсы этого пакета.
Обзор коллекций
Инфраструктура коллекций Java Collections Framework стандартизирует способы управления группами объектов для ваших программ. Коллекции небыли частью исходной версии языка Java, но были добавлены в комплекте J2SE 1.2. До появления инфраструктуры коллекций для хранения групп объектов и манипулирования ими язык Java предлагал такие специальные классы, как
Dictionary, Vector, Stack и
Propert ies. Хотя эти классы были достаточно удобны, им недоставало централизованной, универсальной, идеи. Так, например, способ применения класса
Vector отличался от способа использования класса
Propert ies. Кроме того, этот ранний, специализированный подход не был спроектирован в расчете на дальнейшее расширение и адаптацию. Коллекции стали решением этой и ряда других проблем.
Инфраструктура коллекций была разработана для достижения нескольких целей.
Во-первых, она должна была обеспечить высокую производительность. Реализация основных коллекций (динамических массивов, связных списков, деревьев и хеш- таблиц) отличается высокой эффективностью. Очень редко вам понадобится (если вообще понадобится) программировать один из таких механизмов данных вручную. Во-вторых, эта система должна была позволить разным типам коллекций работать в единой манере и с высокой степенью взаимодействия. В-третьих, расширение и или адаптация коллекций должны были быть просты. И наконец, вся инфраструктура коллекций построена на едином наборе стандартных интерфейсов. Некоторые стандартные реализации (такие, как классы
LinkedList, HashSetnTreeSet) этих интерфейсов вы можете использовать как есть. Вы также можете реализовать свои собственные коллекции, если хотите. Для вашего удобства предусмотрены различные реализации специального назначения, а также частичные реализации, которые облегчают создание ваших собственных коллекций. Наконец, в систему коллекций были добавлены механизмы интеграции стандартных массивов.
Алгоритмы — это другая важная часть инфраструктуры коллекций. Алгоритмы оперируют коллекциями и определены как статические методы класса
Collections. Таким образом, они доступны всем коллекциям. Каждый класс коллекции не нуждается в реализации собственной версии. Алгоритмы представляют стандартные способы манипулирования коллекциями.
Другая сущность, тесно связанная с системой коллекций, — это интерфейс итератора
Iterator. Итератор (iterator) предоставляет общий, стандартизированный способ доступа к элементам коллекций по одному. То есть итератор предлагает способ перебора содержимого коллекций Поскольку каждая коллекция предоставляет итератор, элементы любого класса коллекций могут быть доступны через методы, определенные в интерфейсе
Iterator. Таким образом, код, перебирающий в цикле набор (set), с минимальными изменениями можно применить, например, к списку (В дополнение к коллекциям в инфраструктуре определено также несколько интерфейсов и классов карт. Карта ( та р ) хранит пары “ключ-значение”. Хотя карты являются частью системы коллекций, они, строго говоря, коллекциями не явля­
Глава 17. Пакет java.util: инфраструктура Collections Fram ew ork
4 7 5
ются. Тем не менее вы можете получить доступ к картам в виде коллекций. Такое представление содержит элементы карты, помещенные в коллекцию. Таким образом, выпри желании, можете обрабатывать содержимое карты как коллекцию.
Механизм коллекций был модифицирован для некоторых классов, изначально определенных в пакете j a v a . u t i l таким образом, что они также могут быть интегрированы в новую систему. Важно понимать несмотря на то что добавление коллекций изменило архитектуру многих оригинальных служебных классов, это не отменило ни одного из них. Коллекции просто предлагают лучший способ выполнения некоторых задач.
На заметку Если вы знакомы с языком C++, то, возможно, обнаружите, что вам поможет сходство между технологией коллекций Java и идеологией стандартной библиотеки шаблонов (Standard Template Library — STL), определенной в C++. То, что в C++ называется контейнером, в Java именуется коллекцией. Однако есть существенные отличия между системой коллекций и STL. Поэтому важно не делать поспешных выводов.
Комплект JDK 5 изменил инфраструктуру
Collections Fram ew Когда вышел комплект JDK 5, в инфраструктуре Collections Framework произошло несколько фундаментальных изменений, значительно повысивших ее мощь и упростивших ее применение. К этим изменениям относится добавление обобщений, автоматическая упаковка и распаковка, а также стиль “for-each” цикла f o r . Хотя комплект JDK 7 является следующим основным выпуском языка Java после
JDK 5, эффект от средств комплекта JDK 5 был настолько глубок, что они все еще заслуживают особого внимания. Основная причина в том, что все еще существует и используется большое количество кода, написанного до появления JDK 5. Понимание роли и причин этих изменений очень важно, если выбудете обслуживать или модифицировать устаревший код.
Обобщенные определения фундаментально изменили инфраструктуру коллекций
Добавление обобщенных определений — существенное изменение в инфраструктуре коллекций, поскольку для этого она полностью была перепроектирована. Все коллекции теперь обобщенные, и многие методы, оперирующие коллекциями, также принимают обобщенные параметры. Простое добавление этого свойства коснулось всех частей инфраструктуры коллекций.
Обобщения — это то, чего не хватало коллекциям. Это — безопасность типов. Раньше все коллекции хранили ссылки на класса это означало, что любая коллекция могла хранить объекты любого типа. Таким образом, можно было непреднамеренно сохранить несовместимые типы водной коллекции. Это могло привести к ошибкам несовместимости типов вовремя выполнения. С обобщенными определениями можно явно указать тип сохраняемых данных, и таких ошибок времени выполнения можно избежать.
Несмотря на то что добавление обобщенных определений изменило объявления большинства классов и интерфейсов, а также некоторых их методов, в общем, инфраструктура коллекций по-прежнему работает также, как и ранее. Но если вы знакомы со старыми версиями инфраструктуры коллекций, новый синтаксис мо­
Часть II. Библиотека Java
жет показаться несколько пугающим. Не беспокойтесь, со временем обобщенный синтаксис станет привычным.
Еще один момент чтобы получить выгоду от этого нововведения в коллекциях, старый код должен быть переписан. Это также важно, поскольку в противном случае старый код при компиляции современным компилятором Java будет создавать предупреждения. Чтобы исключить эти сообщения, вам придется добавить информацию о типе везде, где у вас встречается код, работающий с коллекциями.
Средства автоматической упаковки используют элементарные типы
Сохранение элементарных типов в коллекциях облегчает автоматическая упаковка. Как вы увидите, коллекции могут сохранять только ссылки, ноне элементарные значения. Раньше, если вы хотели сохранять в коллекции значение элементарного типа вроде i n t , то должны были вручную упаковать его в объект- оболочку типа. Когда значение извлекалось, нужно было его вручную распаковать применяя явное приведение) в корректный элементарный тип. Благодаря автоматической упаковке-распаковке, язык Java теперь может делать это автоматически, когда необходимо сохранять или извлекать элементарные типы. Нет необходимости вручную делать эти операции.
Стиль цикла “fo r-e ac h Все классы коллекций модифицированы таким образом, что реализуют интерфейс I t e r a b l e . Это значит, что можно перебрать содержимое коллекции, используя стиль “for-each” цикла f o r . Раньше для перебора коллекции необходимо было использовать итератор (описанный далее в настоящей главе, программно конструируя цикл. Хотя итераторы все еще применяются для некоторых целей, во многих случаях циклы на основе итераторов могут быть заменены циклами f o r Интерфейсы коллекций
Инфраструктура коллекций определяет несколько интерфейсов. В этом разделе представлен обзор каждого из них. Начинать с интерфейсов коллекций необходимо потому, что они определяют фундаментальную природу классов коллекций. Взятые по отдельности, конкретные классы просто представляют различные реализации стандартных интерфейсов. Интерфейсы, которые поддерживают коллекции, перечислены в табл. Таблица 17.1. Интерфейсы, поддерживаемые коллекциями

Интерфейс______ Описание ,
______
* '
»
,
Collection Позволяет работать с группами объектов. Это — вершина иерархии коллекций Расширяет интерфейс
Queue для обработки двунаправленных очередей Расширяет интерфейс
Collection для управления последовательностями (списками объектов Расширяет интерфейс
SortedSet для обработки извлечения элементов на основе поисков по ближайшему соответствию
Глава 17. Пакет java.util: инфраструктура Collections Fram ew ork
U
7 Окончание табл Интерфейс Описание Расширяет интерфейс
C ollection для управления специальными типами списков, в которых элементы удаляются только сначала Расширяет интерфейс
C ollection для управления наборами, которые должны содержать уникальные элементы Расширяет интерфейс
Set для управления сортированными наборами
В дополнение к этим интерфейсам, коллекции также используют интерфейсы и
Listlterator, которые детально рассматриваются далее в этой главе. Короче говоря, интерфейс
Comparator определяет два сравниваемых объекта интерфейсы
Iterator и
Listlterator перечисляют объекты в коллекции. Реализуя интерфейс
RandomAccess, список поддерживает эффективный произвольный доступ к своим элементам.
Чтобы обеспечить максимальную гибкость в применении, интерфейсы коллекций позволяют некоторым методам быть необязательными. Необязательные методы позволяют модифицировать содержимое коллекций. Коллекции, которые поддерживают эти методы, называются модифицируемыми Коллекции, которые не позволяют изменять собственное содержимое, называются пемодифицируемыми. Если предпринимается попытка вызвать один из этих методов для немодифици- руемой коллекции, передается исключение
UnsupportedOperationException. Все встроенные коллекции модифицируемы.
Следующий раздел посвящен интерфейсам коллекций.
Интерфейс
C o l l e c t i o Этот интерфейс является фундаментом, на котором построена вся инфраструктура коллекций, поскольку он должен быть реализован всеми классами коллекций. Интерфейс
Collection
— это обобщенный интерфейс, имеющий следующее объявление Здесь Е
указывает тип объектов, которые будет содержать коллекция. Интерфейс
Collection расширяет интерфейс
Iterable. Это значит, что все коллекции можно перебирать циклами вида “for-each”. (Вспомните, что только те классы, которые реализуют интерфейс
Iterable, позволяют перебирать их элементы циклом Интерфейс определяет основные методы, которые будут иметь все коллекции. Эти методы представлены в табл. Таблица 17.2. Методы, определенные в интерфейсе

C o l l e c t i o n
Метод
Описание
boolean add(E объект
E> c)
void c l e a r (Добавляет объект к вызывающей коллекции. Возвращает значение
true, если объект был добавлен к коллекции
Добавляет все элементы с к вызывающей коллекции. Возвращает значение
true, если коллекция изменена те. все элементы добавлены. В противном случае возвращает значение Удаляет все элементы вызывающей коллекции

4 7 Часть II. Библиотека Окончание табл. 17.2

Метод
Описание
boolean contains(Object объект c)

boolean equals(Object объект h a s h C o d e ()
boolean i s E m p t y O
Iterator i t erator()
boolean remove(Object объект c)
boolean
retainAll(Collection c)
int size()
O b j e c t [] t o A r r a y ()
T[] toArray(T a r r a y Возвращает значение
true, если объект является элементом вызывающей коллекции. В противном случае возвращает значение Возвращает значение
true, если вызывающая коллекция содержит все элементы с. В противном случае возвращает значение f a l s Возвращает значение
true, если вызывающая коллекция и объект эквивалентны. В противном случае возвращает значение Возвращает хеш-код вызывающей коллекции
Возвращает значение
true, если вызывающая коллекция пуста. В противном случае возвращает значение Возвращает итератор для вызывающей коллекции
Удаляет один экземпляр объект из вызывающей коллекции. Возвращает значение
true, если элемент удален. В противном случае возвращает значение Удаляет все элементы сиз вызывающей коллекции. Возвращает значение
true, если в результате коллекция изменяется (те. элементы удалены. В противном случае возвращает значение f a l s Удаляет все элементы, кроме входящих в сиз вызывающей коллекции. Возвращает значение
true, если в результате коллекция изменяется (те. элементы удалены. В противном случае возвращает значение
false
Возвращает количество элементов, содержащихся в коллекции
Возвращает массив, содержащий все элементы вызывающей коллекции. Элементы массива являются копиями элементов коллекции
Возвращает массив, содержащий элементы вызывающей коллекции. Элементы массива являются копиями элементов коллекции. Если размер массива
array равен количеству элементов, он возвращается. Если размер массива
array меньше количества элементов, создается и возвращается новый массив нужного размера. Если размер массива
array больше количества элементов, то элементы, следующие за последним из коллекции, устанавливаются равными
null. Если любой элемент коллекции имеет тип, не являющийся подтипом массива
array, передается исключение Поскольку все коллекции реализуют интерфейс
C o l l e c t i o n , знакомство сего методами необходимо для четкого понимания инфраструктуры коллекций. Некоторые из этих методов могут передавать исключение
U n s u p p o r t e d O p e r a ti o n E x c e p t io n . Как уже объяснялось, это происходит, если коллекция не может быть модифицирована. Исключение
C l a s s C a s t E x c e p t i o n передается, когда объекты несовместимы
Глава 17. Пакет java.util: инфраструктура Collections Fram ew ork
4 7 между собой, как, например, в случае, когда предпринимается попытка добавить несовместимый объект в коллекцию. Исключение
NullPointerException передается при попытке вставить значение null в коллекцию, не допускающую пустых элементов. Исключение
II legal
Argument
Except ion передается при использовании неправильного аргумента.
Исключение
IllegalStateException передается при попытке вставить новый элемент в заполненную коллекцию фиксированной длины.
Объекты добавляются в коллекции методом add
(). Отметим, что метод add
() принимает аргумент типа Е Следовательно, добавляемые в коллекцию объекты должны быть совместимыми с ожидаемым типом данных коллекции. Вы можете добавить все содержимое одной коллекции к другой вызовом метода addAll (Вы можете удалить объект, используя метод rem ove (). Чтобы удалить группу объектов, вызовите метод re m o v e A ll (). Можно также удалить все объекты, кроме указанных, применив метод r e t a i n A l l (). Для очистки коллекции потребуется вызвать метод c l e a r (Вы можете определить, содержит ли коллекция определенный объект, вызвав метод contains
(). Чтобы определить, содержит ли одна коллекция все члены другой, вызовите метод containsAll ()
. Определить, пуста ли коллекция, можно с помощью метода is
Empty ()
. Количество элементов, содержащихся в данный момент в коллекции, возвращает метод size (Методы to
Array
() возвращают массив, который содержит элементы, хранящиеся в коллекции. Первый из них возвращает массив класса
Object. Второй — массив элементов того типа, что и массив, указанный в параметре. Обычно второй метод более предпочтителен, поскольку он возвращает массив элементов нужного типа. Эти методы важнее, чем может показаться на первый взгляд. Часто обработка содержимого коллекции с применением синтаксиса массивов выгодна. Имея простой способ превращения коллекций в массивы, вы имеете доступ к преимуществам обоих представлений.
Две коллекции можно сравнить на эквивалентность, вызвав метод equals (). Точный смысл эквивалентности может зависеть от конкретной коллекции. Например, вы можете реализовать метод equals
() так, чтобы он сравнивал значения элементов, хранимых в коллекции. В качестве альтернативы методу equals
() может сравнивать ссылки на эти элементы.
Еще один очень важный метод — это iterator ()
, который возвращает итератор коллекции. Итераторы очень часто используются при работе с коллекциями.
Интерфейс
L i s Этот интерфейс расширяет интерфейс
Collection и определяет такое поведение коллекций, которое сохраняет последовательность элементов. Элементы могут быть вставлены или извлечены по их позиции в списке с помощью индекса, начинающегося с нуля. Список может содержать повторяющиеся элементы. Интерфейс
List
— это обобщенный интерфейс, объявленный следующим образом Здесь Е указывает тип объектов, которые должен содержать список.
В дополнение к объявленным в интерфейсе
Collection методам, интерфейс
List определяет некоторые собственные методы, которые приведены в табл.
17.3. Еще раз отметим, что некоторые из этих методов передают исключение
UnsupportedOperationException, если коллекция не может быть модифицирована, а исключение
ClassCastException передается при несовместимости одного объекта с другим, как, например, когда осуществляется попытка добавить в спи

4 8 Часть II. Библиотека сок элемент несовместимого типа. Кроме того, некоторые методы передают исключение
IndexOutOfBounsException, если используется неправильный индекс. Исключение
NullPointerException передается при попытке вставить в список объект null, когда пустые элементы в данном списке не допускаются. Исключение
IllegalArgumentException передается при передаче неверного аргумента.
Таблица 17.3. Методы, определенные в интерфейсе
L i s t
Метод
Описание
void add(int индекс, Е объект индекс Е с)
Е get(int индекс объект объект t e r a t o r (int индекс индекс индекс объект начало конец b)bВставляет объект в позицию вызывающего списка, указанную в параметре индекс Любые ранее вставленные элементы за указанной позицией вставки смещаются вверх. То есть никакие элементы не перезаписываются
Вставляет все элементы св вызывающий список, начиная с позиции, переданной вин дек с .

Все ранее существовавшие элементы заточкой вставки смещаются вверх. То есть никакие элементы не перезаписываются. Возвращает значение true, если вызывающий список изменяется, и значение f а
1 s е
— в противном случае
Возвращает объект, сохраненный в указанной позиции вызывающего списка
Возвращает индекс первого экземпляра объект в вызывающем списке. Если объект не содержится в списке, возвращается значение -1 Возвращает индекс последнего экземпляра объект в вызывающем списке. Если объект не содержится в списке, возвращается значение -Возвращает итератор, указывающий на начало списка
Возвращает итератор, указывающий на заданную позицию в списке
Удаляет элемент из вызывающего списка в позиции индекс и возвращает удаленный элемент. Результирующий список уплотняется, те. элементы, следующие за удаленным, сдвигаются на одну позицию назад
Присваивает объект элементу, находящемуся в списке в позиции индекс Возвращает прежнее значение
Возвращает список, включающий элементы от начало док он е ц -
1 из вызывающего списка. Элементы из возвращаемого списка также сохраняют ссылки в вызывающем списке
К версиям методов add
() и addAl
1 (), определенным в интерфейсе
Col
1 ect ion, интерфейс
List добавляет методы add
(
int,
Е) и addAl
1 (
int,
Эти методы вставляют элементы в позицию, указанную индексом.
Также семантика методов add (Е )
HaddAll (Collection)
, определенная вин терф ейсе
Collection, изменяется в интерфейсе
List таким образом, что они добавляют элементы вконец списка
Глава 17. Пакет java.util: инфраструктура Collections Fram ew Чтобы получить объект, сохраненный в определенной позиции, вызовите метод g e t () с индексом объекта. Чтобы присвоить значение элементу списка, вызовите метод s e t ( ), указав индекс объекта, который требуется изменить. Чтобы найти индекс объекта, примените метод in d e x O f () или l a s t l n d e x O f (Вы можете получить список изданного списка, вызвав метод subList
() и указав начальный и конечный индексы нового списка. Как вы можете представить, метод subList
() обеспечивает значительное удобство работы со списками.
Интерфейс
S e Интерфейс
Set определяет набор. Он расширяет интерфейс
Collection и определяет поведение коллекций, не допускающих дублирования элементов. Таким образом, метод add
() возвращает значение false при попытке добавить в набор дублированный элемент. Он не определяет никаких собственных дополнительных методов. Интерфейс это обобщенный интерфейс, который объявлен следующим образом Здесь Е указывает тип объектов, которые должен содержать набор.
Интерфейс
S o r t e d S e Интерфейс
SortedSet расширяет интерфейс
Set и объявляет поведение наборов, отсортированных в порядке возрастания. Интерфейс это обобщенный интерфейс, который имеет следующее объявление Здесь Е указывает тип объектов, которые должен содержать набор.
В дополнение к методам, предоставляемым интерфейсом
Set, интерфейс
SortedSet объявляет методы, перечисленные в табл. 17.4. Некоторые из них передают исключение
NoSuchElementExcept ion, когда никаких элементов в вызывающем наборе не содержится. Исключение
ClassCastExcept ion передается при несовместимости объекта с элементами набора. Исключение
NullPointerException передается при попытке использовать пустой объект, когда значение null в наборе недопустимо. При использовании неправильного аргумента передается исключение
IllegalArgumentExcept Таблица 17.4. Методы, определенные в интерфейсе

S o r t e d S e t
Метод
Описание
ComparatorSortedSet
Возвращается объект интерфейса
SortedSet, содержащий e a d s e t (Е
конец)
элементы из вызывающего набора, которые предшествуют конец Элементы из возвращенного набора имеют также ссылки в вызывающем объекте
Е last (Возвращается последний элемент вызывающего отсортированного набора Зак 3030

4 8 Часть II. Библиотека Окончание табл. 17.4
Метод
Описание
SortedSet
s u b s e t (Е
начало,
Е конец
tailSet(E
начало)
Возвращается объект интерфейса
SortedSet, который включает элементы, находящиеся между начало иконе ц -
1. Элементы из возвращенного набора имеют также ссылки в вызывающем объекте
Возвращается объект интерфейса
SortedSet, содержащий элементы из вызывающего набора, которые следуют за конец Элементы из возвращенного набора имеют также ссылки в вызывающем объекте
В интерфейсе
SortedSet определено несколько методов, которые облегчают обработку. Чтобы получить первый объект в отсортированном наборе, вызовите метода чтобы последний — метод last (
). Вы можете получить набор из отсортированного набора, вызвав метод subset
() и передав ему первый и последний объекты набора. Если вам нужно получить набор, который начинается с первого элемента существующего набора, используйте метод headSet
(). Если же требуется получить набор из конца существующего набора, то вызовите метод tailSet
( Интерфейс

N a v i g a b l e S e Этот интерфейс расширяет интерфейс
SortedSet и объявляет поведение коллекции, которая поддерживает извлечение элементов на основе ближайшего соответствия заданному значению или значениям. Интерфейс
NavigableSet
— это обобщенный интерфейс, имеющий следующее объявление Здесь Е
определяет тип содержащихся в наборе объектов. В дополнение к методам, унаследованным от интерфейса
SortedSet, интерфейс
NavigableSet включает также и те, что перечислены в табл. 17.5. Исключение
ClassCastException передается при несовместимости с элементами набора. Исключение
NullPointerException передается при попытке вставить пустой объект, когда набор не допускает значений null. При использовании неправильного аргумента передается исключение
IllegalArgument
Except Таблица 17.5. Методы, определенные в интерфейсе

N a v i g a b l e S e t
Метод
Описание
Е c e i l i n g (Е объект
d e s c e n d i n g l t e r a t o r ()
N avigableSet
descendingSet ()
E floor(E
объект)
Ищет в наборе наименьший элементе, для которого истинно
е>-объект.
Если такой элемент найден, он возвращается. В противном случае возвращается значение Возвращает итератор, перемещающийся от большего к меньшему, другими словами, обратный итератор
Возвращает объект интерфейса
NavigableSet, представляющий собой обратную версию вызывающего набора. Результирующий набор поддерживается вызывающим на­
бором
Ищет в наборе наибольший элементе, для которого истинно
е<-объект.
Если такой элемент найден, он возвращается. В противном случае возвращается значение
null
Глава 17. Пакет java.util: инфраструктура Collections Fram ew ork
4 8 Окончание табл. 17.5
Метод
Описание
NavigableSet
headSet (Еве р х н Граница включать)
Е h i g h e r (Е
объ ект)
Е l o w e r (Е объект) ЕЕ e t (Е
нижнГраница,
boolean
включатьНижн, Е

верхнГраница,
boolean
включатьВерхн)
NavigableSet
t a i l S e t (Е
нижнГраница,
boolean включать)
Возвращает объект интерфейса
Navi
gable
Set, включающий все элементы вызывающего набора, меньшие верхнГраница.
Результирующий набор поддерживается вызывающим набором
Ищет в наборе наибольший элементе, для которого истинное объ ект.
Если такой элемент найден, он возвращается.
В противном случае возвращается значение Ищет в наборе наименьший элементе, для которого истинное объект.Если такой элемент найден, он возвращается. В противном случае возвращается значение Возвращает первый элемент, удаляя его в процессе. Поскольку набор отсортирован, это будет элемент с наименьшим значением. Возвращает значение
null в случае пустого набора
Возвращает последний элемент, удаляя его в процессе. Поскольку набор отсортирован, это будет элемент с наибольшим значением. Возвращает значение
null в случае пустого набора
Возвращает объект интерфейса
Navigable
Set, включающий все элементы вызывающего набора, которые больше нижнГраница и меньше верхнГраница.
Если параметр включатьНижн содержит значение
true, то элемент, равный нижнГраница
, включается. Если параметр включатьВерхн содержит значение
true, также включается элемент, равный верхнГраница
Возвращает объект интерфейса
NavigableSet, включающий все элементы из вызывающего набора, которые больше нижнГраница.
Если параметр включать содержит значение
true, в результат включается элемент, равный нижнГраница. Результирующий набор поддерживается вызывающим набором
Интерфейс
Q u e u Этот интерфейс расширяет интерфейс
C o l l e c t i o n и объявляет поведение очередей, которые представляют собой список по принципу первый вошел — первый вышел. Однако существуют разные типы очередей, в которых порядок основан на некотором критерии. Интерфейс
Q ueu e
— это обобщенный интерфейс со следующим объявлением Здесь Е указывает тип объектов, которые будут храниться в очереди. Методы, определенные в интерфейсе, представлены в табл. Несколько методов передают исключение
C l s s s C a s t E x c e p t i o n , когда объект несовместим с элементами очереди. Исключение
N u l l P o i n t e r E x c e p t i o n передается при попытке сохранения пустого объекта, когда пустые элементы в очереди не разрешены. Исключение
1 1 l e g a l A r g i m e n t E x c e p t i o n передается при использовании неверного аргумента. Исключение
I l l e g a l S t a t e E x c e p t i o n передается при попытке вставки в полную очередь фиксированной длины. Исключение
N o S u c h E le m e n tE x c e p tio n передается при попытке удалить элемент из пустой очереди

4 8 Часть II. Библиотека Несмотря на свою простоту, интерфейс
Q ueue представляет интерес с нескольких точек зрения. Во-первых, элементы могут удаляться только изначала очереди. Во-вторых, есть два метода, которыми можно получать и удалять элементы, —
p o l l
() и r e m o v e () Таблица 17.6. Методы, определенные в интерфейсе

Q u e u метод ;
Описание .
,
.. '
-
*
- * г-Л
Е element (Возвращает элемент из головы очереди. Элемент не удаляется. Если очередь пуста, передается исключение o f f e r (Е
объект)
Пытается добавить объект в очередь. Возвращает значение
true, если объект добавлен, и значение
false — в противном случае
Е реек (Возвращает элемент из головы очереди. Возвращает значение
null, если очередь пуста. Элемент не удаляется
Е poll (Возвращает элемент из головы очереди и удаляет его. Возвращает значение
null, если очередь пуста
Е r e m o v e (Удаляет элемент из головы очереди, возвращая его. Инициирует исключение
NoSuchElementException, если очередь пуста
Разница между ними в том, что метод poll
() возвращает значение null, если очередь пуста, а метод remove
() передает исключение. В-третьих, есть два метода, element (
) и реек, которые получают элемент из головы очереди, ноне удаляют его. Отличаются они тем, что при пустой очереди метод element
() передает исключение, а метод реек) возвращает значение null. И наконец, отметим, что метод of f er
() только пытается добавить элемент в очередь. Поскольку некоторые очереди имеют фиксированную длину и могут быть заполнены, метод of f er
() может завершиться неудачно.
Интерфейс
D e q u e u Интерфейс
D e q u eu e расширяет интерфейс
Q ueue и описывает поведение двунаправленной очереди, которая может функционировать как стандартная очередь первый вошел — первый вышел либо как стек последний вошел — первый вышел. Интерфейс
D e q u eu e
— это обобщенный интерфейс со следующим объявлением Здесь Е
определяет тип объектов, которые будет содержать двусторонняя очередь.
В дополнение к методам, унаследованным от интерфейса, интерфейс
D e q u e u e добавляет методы, перечисленные в табл. 17.7. Несколько методов передают исключение
C l a s s C a s t E x c e p t io n , когда объект несовместим с элементами в двунаправленной очереди. Исключение
N u l l P o i n t e r E x c e p t i o n передается при попытке сохранения пустого объекта, когда пустые элементы двунаправленной очереди не допускаются. При использовании неверного аргумента передается исключение
I I l e g a l A r g i m e n t E x c e p t io n . Исключение
I l l e g a l S t a t e E x c e p t i o n передается при попытке вставки в полную двунаправленную очередь фиксированной длины. Исключение
N o S u c h E le m e n tE x c e p t i o n передается при попытке удалить элемент из пустой очереди
Таблица 17.7. Методы, определенные в интерфейсе
D e q u e u Глава 17. Пакет java.util: инфраструктура Collections Fram ew ork
4 8 5
Метод
Описание
void
addFirst(E объект объект
descendinglterator()
Z g e t F i r s t ()
g e t L a s t ()
ooolean
offerFirst(E объект объект)
Z p e e k F i r s t ()
E p e e k L a s t ()
E p o l l F i r s t ()
E p o l l L a s t ()
E pop()
void push(E объект)
E Добавляет объект в голову двунаправленной очереди. Передает исключение
IllegalStateException, если в очереди фиксированной длины нет места
Добавляет объект в хвост двунаправленной очереди. Передает исключение
IllegalStateException, если в очереди фиксированной длины нет места
Возвращает итератор, перемещающийся от хвоста к голове двунаправленной очереди. То есть возвращает обратный итератор
Возвращает первый элемент двунаправленной очереди. Объект из очереди не удаляется. В случае пустой двунаправленной очереди передает исключение
NoSuchElementExcept Возвращает последний элемент двунаправленной очереди. Объект из очереди не удаляется. В случае пустой двунаправленной очереди передает исключение
NoSuchElementExcept Пытается добавить объект в голову двунаправленной очереди. Возвращает значение
true, если объект добавлен, и значение
false
— в противном случае. Таким образом, этот метод возвращает значение
false при попытке добавить объект в полную двунаправленную очередь фиксированной длины
Пытается добавить объект в хвост двунаправленной очереди. Возвращает значение
true, если объект добавлен, и значение
f а
1
s е
— в противном случае
Возвращает элемент, находящийся в голове двунаправленной очереди. Возвращает значение
null, если очередь пуста. Объект из очереди не удаляется
Возвращает элемент, находящийся в хвосте двунаправленной очереди. Возвращает значение
null, если очередь пуста. Объект из очереди не удаляется
Возвращает элемент, находящийся в голове двунаправленной очереди, одновременно удаляя его из очереди. Возвращает значение
null, если очередь пуста
Возвращает элемент, находящийся в хвосте двунаправленной очереди, одновременно удаляя его из очереди. Возвращает значение
nul
1, если очередь пуста
Возвращает элемент, находящийся в голове двунаправленной очереди, одновременно удаляя его из очереди. Передает исключение
NoSuchElementExcept
ion, если очередь пуста
Добавляет элемент в голову двунаправленной очереди. Если в очереди фиксированной длины нет места, передает исключение
IllegalStateException
Возвращает элемент, находящийся в голове двунаправленной очереди, одновременно удаляя его из очереди. Передает исключение
NoSuchElementExcept
ion, если очередь пуста
Обратите внимание на то, что интерфейс Deque включает методы p u s h () и pop (), которые позволяют интерфейсу Deque функционировать в качестве стека. Кроме того, следует обратить внимание на метод d e s c e n d i n g l t e r a t o r (). Он возвращает итератор, который возвращает элементы в обратном порядке. Другими ело

4 8 Часть II. Библиотека вами, итератор, перемещающийся от конца коллекции к ее началу. Реализация интерфейса
Deque может быть ограниченной по емкости, те. в него может быть добавлено ограниченное количество элементов. В этом случае попытка добавления элемента может вызвать исключение. Интерфейс
Deque позволяет обрабатывать такие сбои двумя способами. Во-первых, методы вроде addFirst (
) и addLast () передают исключение
IllegalStateException, если двунаправленная очередь имеет ограниченную емкость. Во-вторых, такие методы, как of ferFirst
() и of ferLast
(), возвращают значение f a l s e , когда элемент не может быть добавлен.
Классы коллекций
Теперь, когда вы знакомы с интерфейсами коллекций, можно приступать к изучению стандартных классов, которые их реализуют. Некоторые классы представляют полную реализацию и могут применяться как есть. Другие же являются абстрактными, представляя только шаблонные реализации, которые используются в качестве начальных точек при создании конкретных коллекций. Как правило, классы коллекций не синхронизированы, но, как будет показано далее в настоящей главе, при необходимости можно получить их синхронизированные версии.
Стандартные классы коллекций перечислены в табл. Таблица 17.8. Стандартные классы коллекций

Класс
Описание
A b s t гасtCollection
Реализует большую часть интерфейса Расширяет класс
A b s t r a c t e d lection и реализует большую часть интерфейса
List
A Расширяет класс
Abs
tract Сои реализует часть интерфейса
Queue
A Расширяет класс
AbstractList для использования в коллекциях, использующих последовательности вместо случайного доступа к элементам
LinkedList
Реализует связный список, расширяя класс
AbstractSequentalList
ArrayList
Реализует динамический массив, расширяя класс
AbstractList
ArrayDeque
Реализует динамическую двухстороннюю очередь, расширяя класс
A b s t r a c t e d lection и реализуя интерфейс
Deque
AbstractSet
Расширяет класс
A b s t r a c t e d
lection и реализует большую часть интерфейса Расширяет класс
AbstractSet для использования с элементами типа Расширяет класс
AbstractSet для использования с хеш- таблицами
LinkedHashSet
Расширяет класс
HashSet, разрешая итерации порядковой вставки
PriorityQueue
Расширяет класс
AbstractQueue для поддержки очередей, основанных на приоритетах
TreeSet
Реализует набор, хранимый в дереве. Расширяет класс
В следующих разделах рассматриваются конкретные классы коллекций и иллюстрируется их применение.
На заметку В дополнение к классам коллекций, некоторые унаследованные от прежних версий классы, такие как
Vector, stack и

HashTable, были перепроектированы для поддержки коллекций. Они также рассматриваются далее в этой главе.

1   ...   35   36   37   38   39   40   41   42   ...   90


написать администратору сайта