Spec-Zone .ru
спецификации, руководства, описания, API
Реализации
След: Наборы

Урок: Реализации

Реализации являются объектами данных, используемыми, чтобы сохранить наборы, которые реализуют интерфейсы, описанные в разделе Интерфейсов. Этот урок описывает следующие виды реализаций:

Реализации общего назначения получаются в итоге в следующей таблице.

Реализации общего назначения
Интерфейсы Реализации хэш-таблицы Реализации массива изменяемого размера Древовидные Реализации Реализации связанного списка Хэш-таблица + Реализации Связанного списка
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, который является также a List реализация, и PriorityQueue, который опускается от таблицы. Эти две реализации обеспечивают совсем другую семантику: LinkedList обеспечивает семантику FIFO, в то время как PriorityQueue упорядочивает его элементы согласно их значениям.

Каждая из реализаций общего назначения обеспечивает все дополнительные операции, содержавшиеся в ее интерфейсе. Все разрешение null элементы, ключи, и значения. Ни один не синхронизируется (ориентированный на многопотоковое исполнение). У всех есть сбой быстро iterators, которые обнаруживают недопустимую параллельную модификацию во время итерации и перестали работать быстро и чисто вместо того, чтобы рискнуть произвольным, недетерминированным поведением в неопределенное время в будущем. Все Serializable и вся поддержка общественность clone метод.

Факт, что эти реализации несинхронизируются, представляет перерыв с прошлым: наборы наследства Vector и Hashtable синхронизируются. Существующий подход был проявлен, потому что наборы часто используются, когда синхронизация не имеет никакого преимущества. Такое использование включает однопоточное использование, использование только для чтения, и использование в качестве части большего объекта данных, который делает его собственную синхронизацию. Вообще, это - хорошая практика проекта API, чтобы не заставить пользователей заплатить за функцию, которую они не используют. Кроме того ненужная синхронизация может привести к мертвой блокировке при определенных обстоятельствах.

Если Вы нуждаетесь в ориентированных на многопотоковое исполнение наборах, обертках синхронизации, описанных в разделе Реализаций Обертки, позволяете какому-либо набору быть преобразованным в синхронизируемый набор. Таким образом синхронизация является дополнительной для реализаций общего назначения, тогда как это обязательно для реализаций наследства. Кроме того, java.util.concurrent пакет обеспечивает параллельные реализации BlockingQueue интерфейс, который расширяется Queue, и ConcurrentMap интерфейс, который расширяется Map. Эти реализации предлагают намного более высокий параллелизм чем простые синхронизируемые реализации.

Как правило следует думать об интерфейсах, не реализациях. Именно поэтому в этом разделе нет никаких примеров программирования. По большей части выбор реализации влияет только на производительность. Привилегированный стиль, как упомянуто в разделе Интерфейсов, должен выбрать реализацию когда a Collection создается и сразу присвоить новый набор переменной соответствующего типа интерфейса (или передать набор к методу, ожидая параметр типа интерфейса). Таким образом программа не становится зависящей от любых добавленных методов в данной реализации, оставляя программиста, свободного изменить реализации в любое время, что она гарантируется проблемами производительности или поведенческими деталями.

Разделы, которые следуют кратко, обсуждают реализации. Производительность реализаций описывается, используя слова такой в качестве постоянно-разовая, журнал, линейный, n журнал (n), и квадратная, чтобы обратиться к асимптотической верхней границе на временной сложности выполнения работы. Все это - настоящий полный рот, и не имеет значения очень, если Вы не знаете то, что это означает. Если Вы интересуетесь знанием больше, сошлитесь на любой хороший учебник алгоритмов. Одна вещь иметь в виду состоит в том, что у этого вида метрики производительности есть свои ограничения. Иногда, номинально более медленная реализация может быть быстрее. Когда в сомнении, определите эксплуатационные качества!


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Предыдущий Урок
Следующая страница: Реализации Набора