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

Контейнер List гарантирует хранение списка элементов в определенной последовательности. Интерфейс List добавляет в Collection методы вставки и удаления элементов в середине списка.

Существуют две основные разновидности List:

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

java_al_ll.png

Пример работы с ArrayList

ArrayList al = new ArrayList();

al.add("C");
al.add("A");
al.add("E");
al.add("F");
al.add(1, "A2");

System.out.println("Содержимое al: " + al);

al.remove("F");
al.remove(2);

Класс LinkedList, как и ArrayList, реализует базовый интерфейс List, но при этом выполняет некоторые операции (вставка и удаление в середине списка) более эффективно, чем ArrayList. И наоборот, с операциями произвольного доступа он работает менее эффективно.

В LinkedList также добавляются методы, которые позволяют использовать его как стек, очередь или двустороннюю очередь (дек).

Некоторые из этих методов представляют собой синонимы или небольшие видоизменения для создания имен, более знакомых в контексте конкретного применения (прежде всего Queue). Например, методы getFirst() и element() идентичны - они возвращают начало (первый элемент) списка без его удаления и выдают исключение NoSuchElementException, если список пуст.

Метод addFirst() вставляет элемент в начало списка.

Метод offer() делает то же, что add() и addLast(). Все эти методы добавляют элемент в конец списка.

Метод removeLast() удаляет и возвращает последний элемент списка.

Пример работы с LinkedList

LinkedList ll = new LinkedList();

ll.add("F");
ll.add("B");
ll.add("D");
ll.add("E");
ll.add("C");
ll.addLast("Z");
ll.addFirst("A");
ll.add(1, "A2");
System.out.println("Содержимое ll: " + ll);

// удаление элементов
ll.remove("F");
ll.remove(2);
System.out.println("Содержимое ll: " + ll);

// удалить первый и второй элемент 
ll.removeFirst();
ll.removeLast();
System.out.println("Содержимое ll: " + ll);

blog comments powered by Disqus