Решил у себя потестить, и результаты оказались неожиданными:
ArrayList проигрывает LinkedList-у только при добавлении / удалении элементов из начала списка. (а так же потенциально проигрывает при добавлении / удалении с конца списка, если список на миллиарды элементов)
Тестил так: создал ArrayList и LinkedList каждый на миллион элементов и выполнял каждую операцию 100000 раз.
Вот результаты:
Добавление в начало: ArrayList: 25990 мс LinkedList: 7 мс
Удаление из начала: ArrayList: 22425 мс LinkedList: 5 мс
Добавление в середину: ArrayList: 10676 мс LinkedList: 306245 мс
Удаление из середины: ArrayList: 9264 мс LinkedList: 289440 мс
Добавление в конец: ArrayList: 5 мс LinkedList: 5 мс
Удаление c конца: ArrayList: 30 мс LinkedList: 14 мс
Взятие по индексу из середины: ArrayList: 6 мс LinkedList: 305928 мс
Присваивание по индексу из середины: ArrayList: 7 мс LinkedList: 305045 мс
Взятие по индексу в начале: ArrayList: 5 мс LinkedList: 11 мс
Взятие по индексу в конце: ArrayList: 5 мс LinkedList: 3 мс
Вывод: используйте LinkedList только если нам нужно много раз делать операции с элементами в начале или в конце списка. В остальных случаях - ArrayList
P.S. Когда писал комментарий, то забыл, что у LinkedList можно получить итератор и начинать вставлять элементы с нужного места. В таком случае действительно - все операции по вставке и удалении из середины выполняются буквально за пару миллисекунд. Это пригодится, если нам надо все время вставлять элементы в одно и то же место
Алексей Боярчук
30 уровень
listIterator()
, который возвращает объект, реализующий интерфейс ListIterator, а там уже не сложно разобраться...listIterator()
, который возвращает объект, реализующий интерфейс ListIterator, а там уже не сложно разобраться...