Spec-Zone .ru
спецификации, руководства, описания, API
|
Основные преимущества платформы наборов состоят в том что это:
Платформа наборов состоит из:
Интерфейсы набора делятся на две группы. У самого основного интерфейса, java.util.Collection, есть следующие потомки:
Другие интерфейсы набора основаны на java.util.Map и не являются истинными наборами. Однако, эти интерфейсы содержат операции представления набора, которые позволяют им управляться как наборы. у Map есть следующее потомство:
Многие из методов модификации в интерфейсах набора маркируются дополнительными. Реализациям разрешают не выполнить один или больше этих операций, бросая исключение на этапе выполнения (UnsupportedOperationException), если они предпринимаются. Документация для каждой реализации должна определить, какие дополнительные операции поддерживаются. Несколько терминов вводятся, чтобы помочь в этой спецификации:
Некоторые реализации ограничивают, какие элементы (или в случае Maps, ключей и значений) могут быть сохранены. Возможные ограничения включают элементы требования в:
Попытка добавить элемент, который нарушает результаты ограничений реализации в исключении на этапе выполнения, обычно ClassCastException, IllegalArgumentException, или NullPointerException. Попытка удалить или протестировать на присутствие элемента, который нарушает ограничения реализации, может привести к исключению. Некоторые ограниченные наборы разрешают это использование.
У классов, которые реализуют интерфейсы набора обычно, есть имена в форме <Стиля реализации> <Интерфейс>. Реализации общего назначения получаются в итоге в следующей таблице:
Интерфейс | Хэш-таблица | Массив изменяемого размера | Сбалансированное дерево | Связанный список | Хэш-таблица + Связанный список |
---|---|---|---|---|---|
Set |
HashSet | TreeSet | LinkedHashSet | ||
List |
ArrayList | LinkedList | |||
Deque |
ArrayDeque | LinkedList | |||
Map |
HashMap | TreeMap | LinkedHashMap |
Реализации общего назначения поддерживают все дополнительные операции в интерфейсах набора и не имеют никаких ограничений на элементы, которые они могут содержать. Они несинхронизируются, но класс Collections содержит статические фабрики, названные обертками синхронизации, которые могут использоваться, чтобы добавить синхронизацию ко многим несинхронизируемым наборам. У всех новых реализаций есть сбой быстро iterators, которые обнаруживают недопустимую параллельную модификацию, и перестали работать быстро и чисто (вместо того, чтобы вести себя беспорядочно).
AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList и классы AbstractMap обеспечивают основные реализации базовых интерфейсов набора, чтобы минимизировать усилие, требуемое реализовывать их. Документация API для этих классов описывает точно, как каждый метод реализуется так, разработчик знает, какие методы должны быть переопределены, даны производительность основных операций определенной реализации.
Приложения, которые используют наборы больше чем от одного потока, должны быть тщательно запрограммированы. Вообще, это известно как параллельное программирование. Платформа Java включает обширную поддержку параллельного программирования. См. Утилиты Параллелизма Java для деталей.
Наборы так часто используются, что различные параллельные дружественные интерфейсы и реализации наборов включаются в API. Эти типы идут вне оберток синхронизации, обсужденных ранее, чтобы обеспечить функции, которые часто необходимы в параллельном программировании.
Эти параллельно-осведомленные интерфейсы доступны:
Следующие параллельно-осведомленные классы реализации доступны. См. документацию API для корректного использования этих реализаций.
Основная цель проекта состояла в том, чтобы произвести API, который был маленьким в размере и, что еще более важно, в "концептуальном весе." Было критическим, что новая функциональность не кажется слишком отличающейся от текущих программистов Java; это должно было увеличить текущие средства, а не заменить их. Одновременно, новый API должен был быть достаточно мощным, чтобы обеспечить все преимущества, описанные ранее.
Чтобы сохранить число базовых интерфейсов маленьким, интерфейсы не пытаются получить такие тонкие различия как переменчивость, модифицируемость, и resizability. Вместо этого определенные вызовы в базовых интерфейсах являются дополнительными, позволяя реализациям бросить UnsupportedOperationException, чтобы указать, что они не поддерживают указанную дополнительную работу. Разработчики набора должны ясно задокументировать, какие дополнительные операции поддерживаются реализацией.
Чтобы сохранить число методов в каждом базовом интерфейсе маленьким, интерфейс содержит метод только если также:
Было критическим, что все разумные представления наборов взаимодействуют хорошо. Это включало массивы, которые не могут быть заставлены реализовать интерфейс Collection непосредственно, не изменяя язык. Таким образом платформа включает методы, чтобы позволить наборам быть перемещенными в массивы, массивы, чтобы быть просмотренными как наборы, и отображается, чтобы быть просмотренной как наборы.