Каждый человек, который ответил здесь, является правильным. Все они правы в своем представлении, что это очень сильно зависит от вашего шаблона использования, т. Е. Нет единого списка для всех. Но в момент моего написания они все забыли упомянуть (или это, или я неряшливый читатель), в случае использования LinkedList в лучшем случае: вставка, помещенная в итератор.Это означает, что если вы делаете не только
LinkedList::add(int index, E element)
Inserts the specified element at the specified position in this list.
, которые, как представляется, метод они использовали для получения статистических данных, но
iterator.insert(E element)
iterator
с полученным либо через
public abstract ListIterator<E> listIterator(int index)
Returns a list-iterator of the elements in this list (in proper sequence), starting at the specified position in the list.
или
public Iterator<E> iterator()
Returns an iterator over the elements in this list (in proper sequence).
, тогда вы обязательно получите наилучшую произвольную производительность вставки. Это подразумевает, конечно, что вы можете ограничить количество вызовов итератора() и listIterator() и количество движений итератора по списку (например, вы можете сделать только один последовательный проход по списку, чтобы сделать все необходимые вам вставки). Это делает его прецеденты весьма ограниченными по количеству, но тем не менее они очень часто встречаются. И производительность LinkedList в них - причина, по которой она (и будет в будущем) храниться во всех коллекциях контейнеров на всех языках, а не только на Java.
PS. Все вышесказанное, конечно, относится ко всем другим операциям, таким как get(), remove() и т. Д. Я тщательно продуманный доступ через итератор сделает все из них O (1) с очень небольшой фактической константой. То же самое можно сказать и для всех других списков, то есть доступ итератора ускорит их все (хотя и немного). Но не вставлять ArrayList() и remove() - они все равно будут O (n) ... И не сглаживание TreeList вставки() и remove() - это не то, что вы можете избежать ... И TreeList вероятно, больше накладных расходов на память ... Вы понимаете мою идею. Чтобы суммировать все это, LinkedList предназначен для небольших высокопрофессиональных операций сканирования по спискам. Независимо от того, что вам нужно или нет, - только вы можете сказать.
PSS. Тем не менее, я поэтому и остаюсь
соблазн заключить они амортизируются или игнорировать боли рост ArrayList, и не приняло во внимание вставки и удаления раз для элемента в LinkedList, что уже находится .
Я предполагаю, что treelist поддерживается сбалансированной (возможно, красно-черной) реализацией дерева, основанной только на индексе. Это, безусловно, заставит treelist быстро, хотя я не знаю, что влияет на это, балансируя большие списки. Я думаю, что вы правы в том, что они игнорируют инициализацию ArrayList и проблемы с изменением размера. – Thimmayya