Spec-Zone .ru
спецификации, руководства, описания, API
|
List
реализации группируются в реализации специального назначения и общего назначения.
Есть два общего назначения List
реализации — ArrayList
LinkedList
ArrayList
, который предлагает постоянно-разовый позиционный доступ и просто быстр. Это не должно выделить объект узла для каждого элемента в List
, и это может использовать в своих интересах System.arraycopy
когда это должно переместить многократные элементы одновременно. Думать ArrayList
как Vector
без издержек синхронизации.
Если Вы часто добавляете элементы к началу List
или выполните итерации по List
чтобы удалить элементы из его внутренней части, следует рассмотреть использование LinkedList
. Эти операции требуют постоянно-разовый в a LinkedList
и линейно-разовый в ArrayList
. Но Вы платите большую цену в производительности. Позиционный доступ требует линейно-разовый в a LinkedList
и постоянно-разовый в ArrayList
. Кроме того, постоянный множитель для LinkedList
намного хуже. Если Вы думаете, что хотите использовать a LinkedList
, определите эксплуатационные качества своего приложения с обоими LinkedList
и ArrayList
прежде, чем сделать Ваш выбор; ArrayList
обычно быстрее.
ArrayList
имеет один настраивающий параметр — начальная емкость, которая обращается к числу элементов ArrayList
может содержать прежде, чем это должно будет вырасти. LinkedList
не имеет никаких настраивающих параметров и семи дополнительных операций, одна из которых clone
. Другие шесть addFirst
, getFirst
, removeFirst
, addLast
, getLast
, и removeLast
. LinkedList
также реализации Queue
интерфейс.
CopyOnWriteArrayList
List
реализация поддерживается массивом копии на записи. Эта реализация подобна в природе CopyOnWriteArraySet
. Никакая синхронизация не необходима, даже во время итерации, и iterators, как гарантируют, никогда не не бросят ConcurrentModificationException
. Эта реализация хорошо подходит для поддержания списков обработчика событий, в которых изменение является нечастым, и обход является частым и потенциально отнимающим много времени.
Если Вы нуждаетесь в синхронизации, a Vector
будет немного быстрее чем ArrayList
синхронизируемый с Collections.synchronizedList
. Но Vector
имеет загрузки операций наследства, так делать все возможное всегда управлять Vector
с List
взаимодействуйте через интерфейс или иначе Вы не будете в состоянии заменить реализацию в более позднее время.
Если Ваш List
фиксируется в размере — то есть, Вы никогда не будете использовать remove
, add
, или любая из объемных операций кроме containsAll
— у Вас есть третья опция, это определенно достойно рассмотрения. См. Arrays.asList
в разделе