1) Базовая структура данных
Первое различие между ArrayList и LinkedList связано с тем, что ArrayList поддерживается Array, а LinkedList поддерживается LinkedList. Это приведет к дальнейшим различиям в производительности.
2) LinkedList реализует Deque
Другое отличие между ArrayList и LinkedList состоит в том, что помимо интерфейса List, LinkedList также реализует интерфейс Deque, который обеспечивает операции first-first-out для add () и poll () и некоторых других функций Deque. 3) Добавление элементов в ArrayList Добавление элемента в ArrayList - это операция O (1), если он не запускает изменение размера массива, в этом случае он становится O (log (n)), с другой стороны, добавление элемента в LinkedList - это операция O (1), так как она не требует навигации.
4) Удаление элемента из позиции
Чтобы удалить элемент из определенного индекса, например, вызывая remove (index), ArrayList выполняет операцию копирования, которая приближает его к O (n), в то время как LinkedList необходимо пройти к этой точке, что также делает его O (n / 2), так как он может перемещаться в любом направлении на основе близости .
5) Итерации по ArrayList или LinkedList
Итерация - это операция O (n) как для LinkedList, так и для ArrayList, где n - это номер элемента.
6) Извлечение элемента из позиции
Операция get (index) - это O (1) в ArrayList, а ее O (n / 2) в LinkedList, так как она должна проходить до этой записи. Хотя в обозначении Big O O (n / 2) - это просто O (n), потому что мы игнорируем там константы.
7) Память
LinkedList использует объект-оболочку, Entry, который является статическим вложенным классом для хранения данных и двух узлов следующего и предыдущего, тогда как ArrayList просто хранит данные в массиве.
Так что в случае ArrayList требования к памяти кажутся меньше, чем в LinkedList, за исключением случая, когда Array выполняет операцию изменения размера, когда копирует содержимое из одного массива в другой.
Если массив достаточно большой, он может занять много памяти в этой точке и запустить сборку мусора, что может замедлить время отклика.
Из всех вышеупомянутых различий между ArrayList и LinkedList, похоже, ArrayList - лучший выбор, чем LinkedList, почти во всех случаях, кроме случаев, когда вы выполняете частую операцию add (), а не remove () или get ().
Связанный список легче изменить, чем ArrayList, особенно если вы добавляете или удаляете элементы из начала или конца, потому что связанный список внутренне хранит ссылки на эти позиции, и они доступны в O (1) раз.
Другими словами, вам не нужно проходить через связанный список, чтобы достичь позиции, в которой вы хотите добавить элементы, в этом случае добавление становится операцией O (n). Например, вставка или удаление элемента в середине связанного списка.
По моему мнению, используйте ArrayList вместо LinkedList для большинства практических целей в Java.