|
Spec-Zone .ru
спецификации, руководства, описания, API
|
List реализации группируются в реализации специального назначения и общего назначения.
Есть два общего назначения List реализации — и . Большую часть времени Вы будете, вероятно, использовать 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 интерфейс.
a List реализация поддерживается массивом копии на записи. Эта реализация подобна в природе CopyOnWriteArraySet. Никакая синхронизация не необходима, даже во время итерации, и iterators, как гарантируют, никогда не не бросят ConcurrentModificationException. Эта реализация хорошо подходит для поддержания списков обработчика событий, в которых изменение является нечастым, и обход является частым и потенциально отнимающим много времени.
Если Вы нуждаетесь в синхронизации, a Vector будет немного быстрее чем ArrayList синхронизируемый с Collections.synchronizedList. Но Vector имеет загрузки операций наследства, так делать все возможное всегда управлять Vector с List взаимодействуйте через интерфейс или иначе Вы не будете в состоянии заменить реализацию в более позднее время.
Если Ваш List фиксируется в размере — то есть, Вы никогда не будете использовать remove, add, или любая из объемных операций кроме containsAll — у Вас есть третья опция, это определенно достойно рассмотрения. См. Arrays.asList в разделе