Разница между ArrayList и LinkedList в Java

Автор: Laura McKinney
Дата создания: 3 Апрель 2021
Дата обновления: 8 Май 2024
Anonim
ArrayList, LinkedList. Java собеседование
Видео: ArrayList, LinkedList. Java собеседование

Содержание


ArrayList и LinkedList являются Коллекция классы, и оба они реализуют Список интерфейс. Класс ArrayList создает список, который внутренне хранится в динамический массив размер которого увеличивается или уменьшается при добавлении или удалении элементов. LinkedList также создает список, который внутренне хранится в двояко связанный Список, Оба класса используются для хранения элементов в списке, но основное различие между классами ArrayList и LinkedList заключается в том, что ArrayList позволяет произвольный доступ к элементам в списке, так как он работает на индекс на основе структура данных. С другой стороны, LinkedList не разрешает произвольный доступ, так как не имеет индексов для прямого доступа к элементам, он должен пройти по списку, чтобы получить или получить доступ к элементу из списка.

Давайте обсудим некоторые различия между ArrayList и LinkedList с помощью сравнительной таблицы, показанной ниже.


  1. Сравнительная таблица
  2. Определение
  3. Ключевые отличия
  4. Вывод

Сравнительная таблица

Основа для сравненияArrayListLinkedList
основной ArrayList обеспечивает произвольный доступ к элементам в списке.LinkedList не разрешает произвольный доступ к элементам в списке.
Структура данныхВнутренняя структура, используемая для хранения элементов, является динамическим массивом.Внутренняя структура, используемая для хранения элементов, представляет собой двойной список ссылок.
РасширяетArrayList расширяет класс AbstarctList.LinkedList расширяет AbstractSequentialList.
инвентарьAbstractList реализует интерфейс List.LinkedList реализует Список, Deque, Очередь.
Доступ Доступ к элементам в списке быстрее в ArrayList.Доступ к элементам в списке медленнее в LinkedList.
манипуляцияМанипуляции с элементами в списке медленнее в ArrayList.Манипуляции с элементами в списке быстрее в LinkedList.
ПоведениеArraylList ведет себя как список, поскольку он реализует список.LinkedList ведет себя как List a также как Queue, поскольку он реализует List и Queue оба.


Определение ArrayList

AbstractList класс определяется Коллекция Framework, Расширяется AbstarctList и реализует Список интерфейс. ArrayList использует динамический массив то есть массив переменной длины как внутренняя структура данных для хранения элементов в списке. Необходимость ArrayList возникает, поскольку массив в Java имеет фиксированную длину. Поэтому он не может увеличиваться или уменьшаться в размере, поскольку элементы добавляются или удаляются из массива. Таким образом, вы должны знать размер необходимого массива заранее. Но список массивов, реализованный с использованием класса ArrayList, может увеличиваться и уменьшаться в размере по мере добавления или удаления элементов из массива.

Доступ к списку массивов, реализованных с использованием ArrayList случайным образом как ArrayList работает на основе индекса. Таким образом, зная индекс, вы можете получить прямой доступ к элементу списка. Существует три конструктора ArrayList:

ArrayList () ArrayList (Коллекция <? Extends E> c) ArrayList (целая емкость)

первый Конструктор реализует пустой список массивов. второй конструктор реализует список массивов, инициализированный с помощью Коллекция с элементы. в третьих конструктор реализует список массивов с вместимость предусмотрено в аргументе. Работая с ArrayList, иногда вам потребуется преобразовать Collection ArrayList в массив. Это можно сделать, позвонив ToArray ().

Определение LinkedList

Как ArrayList, LinkedList также Коллекция класс использует двусвязный список как внутренняя структура данных для хранения элементов в списке. Класс LinkedList расширяется AbstractSequentialList и реализует Список, Deque а также Очередь интерфейсы. Связанный список, реализованный с использованием LinkedList, не может быть доступен в случайном порядке. Если вы хотите извлечь какой-либо элемент из списка, вы должны выполнить итерацию списка, чтобы найти этот элемент.

В классе LinkedList есть два конструктора.

LinkedList () LinkedList (Коллекция <? Extends E> c)

первый Конструктор создает пустой связанный список. второй конструктор создает связанный список, инициализированный с элементами Коллекция с.

В LinkedList манипулирование списком легко и быстро. Это потому, что если вы добавляете или удаляете какой-либо элемент в списке, тогда нет необходимости сдвигать элементы, как в ArrayList. Но доступ медленнее, поскольку у него нет индекса для прямого доступа к элементам.

  1. Доступ к списку, реализованному с помощью ArrayList, можно получить случайным образом, поскольку ArrayList принимает основанную на индексе структуру данных массива. С другой стороны, список, реализуемый LinkedList, не может быть доступен случайным образом, потому что для получения или доступа к определенному элементу в списке вы должны просмотреть список.
  2. Внутренняя структура данных, используемая ArrayList для хранения элементов списка, является динамический массив которые могут увеличиваться или уменьшаться по мере добавления или удаления элементов из списка. Однако внутренняя структура данных, используемая LinkedList для хранения элементов в списке, двусвязный список.
  3. ArrayList расширяет AbstractList класс, который также является классом Collection, тогда как класс LinkedList расширяется AbstractSequentialList класс, который снова является классом Collection.
  4. Реализует класс ArrayList Список интерфейс, тогда как класс LinkedList реализует Список, Очередь, а также Deque интерфейсы.
  5. Доступ к элементам из списка, реализованным с использованием ArrayList, Быстрее так как он имеет структуру данных на основе индекса. С другой стороны, в списке, реализованном byLinkledList, нет структуры, основанной на индексах. Следовательно, итератор применяется к списку для достижения элемента, к которому осуществляется доступ, что делает доступ помедленнее в LinkedList.
  6. Манипулирование - это Манипуляция в списке, реализованном с использованием ArrayList, потому что всякий раз, когда элемент добавляется или удаляется из списка, элементы в списке смещаются, чтобы учесть изменение. С другой стороны, в списке, реализуемом LinkedList, манипулирование выполняется быстрее, поскольку оно не требует смещения элементов в списке при добавлении или удалении элементов из списка.
  7. ArrayList действует как список поскольку он реализует интерфейс List, тогда как LinkedList действует как список а также очередь так как он реализует оба списка и очереди.

Вывод:

Когда есть частое добавление или удаление элементов в списке, LinkedList должен использоваться, поскольку он работает лучше во время манипуляции. Если частый поиск применяется к списку, ArrayList является лучшим выбором, поскольку он работает лучше при доступе к элементам из списка.