Spec-Zone .ru
спецификации, руководства, описания, API
|
Реализации являются объектами данных, используемыми, чтобы сохранить наборы, которые реализуют интерфейсы, описанные в разделе Интерфейсов. Этот урок описывает следующие виды реализаций:
java.util.concurrent
пакет.Реализации общего назначения получаются в итоге в следующей таблице.
Интерфейсы | Реализации хэш-таблицы | Реализации массива изменяемого размера | Древовидные Реализации | Реализации связанного списка | Хэш-таблица + Реализации Связанного списка |
---|---|---|---|---|---|
Set |
HashSet |
TreeSet |
LinkedHashSet |
||
List |
ArrayList |
LinkedList |
|||
Queue |
|||||
Map |
HashMap |
TreeMap |
LinkedHashMap |
Как можно видеть от таблицы, Платформа Наборов Java обеспечивает несколько реализаций общего назначения Set
, List
Map
HashSet
ArrayList
HashMap
SortedSet
SortedMap
TreeSet
TreeMap
Set
и Map
строки. Есть два общего назначения Queue
реализации — LinkedList
List
реализация, и PriorityQueue
LinkedList
обеспечивает семантику FIFO, в то время как PriorityQueue
упорядочивает его элементы согласно их значениям.
Каждая из реализаций общего назначения обеспечивает все дополнительные операции, содержавшиеся в ее интерфейсе. Все разрешение null
элементы, ключи, и значения. Ни один не синхронизируется (ориентированный на многопотоковое исполнение). У всех есть сбой быстро iterators, которые обнаруживают недопустимую параллельную модификацию во время итерации и перестали работать быстро и чисто вместо того, чтобы рискнуть произвольным, недетерминированным поведением в неопределенное время в будущем. Все Serializable
и вся поддержка общественность clone
метод.
Факт, что эти реализации несинхронизируются, представляет перерыв с прошлым: наборы наследства Vector
и Hashtable
синхронизируются. Существующий подход был проявлен, потому что наборы часто используются, когда синхронизация не имеет никакого преимущества. Такое использование включает однопоточное использование, использование только для чтения, и использование в качестве части большего объекта данных, который делает его собственную синхронизацию. Вообще, это - хорошая практика проекта API, чтобы не заставить пользователей заплатить за функцию, которую они не используют. Кроме того ненужная синхронизация может привести к мертвой блокировке при определенных обстоятельствах.
Если Вы нуждаетесь в ориентированных на многопотоковое исполнение наборах, обертках синхронизации, описанных в разделе java.util.concurrent
пакет обеспечивает параллельные реализации BlockingQueue
интерфейс, который расширяется Queue
, и ConcurrentMap
интерфейс, который расширяется Map
. Эти реализации предлагают намного более высокий параллелизм чем простые синхронизируемые реализации.
Как правило следует думать об интерфейсах, не реализациях. Именно поэтому в этом разделе нет никаких примеров программирования. По большей части выбор реализации влияет только на производительность. Привилегированный стиль, как упомянуто в разделе Интерфейсов, должен выбрать реализацию когда a Collection
создается и сразу присвоить новый набор переменной соответствующего типа интерфейса (или передать набор к методу, ожидая параметр типа интерфейса). Таким образом программа не становится зависящей от любых добавленных методов в данной реализации, оставляя программиста, свободного изменить реализации в любое время, что она гарантируется проблемами производительности или поведенческими деталями.
Разделы, которые следуют кратко, обсуждают реализации. Производительность реализаций описывается, используя слова такой в качестве постоянно-разовая, журнал, линейный, n журнал (n), и квадратная, чтобы обратиться к асимптотической верхней границе на временной сложности выполнения работы. Все это - настоящий полный рот, и не имеет значения очень, если Вы не знаете то, что это означает. Если Вы интересуетесь знанием больше, сошлитесь на любой хороший учебник алгоритмов. Одна вещь иметь в виду состоит в том, что у этого вида метрики производительности есть свои ограничения. Иногда, номинально более медленная реализация может быть быстрее. Когда в сомнении, определите эксплуатационные качества!