Контейнер List
гарантирует хранение списка элементов в определенной последовательности. Интерфейс List
добавляет в Collection методы вставки и удаления элементов в середине списка.
Существуют две основные разновидности List
:
ArrayList
с превосходной скоростью произвольного доступа к элементам, но относительно медленными операциями вставки и удаления элементов в середине.LinkedList
с оптимальным последовательным доступом и низкозатратными операциями вставки и удаления в середине списка. Операции произвольного доступа LinkedList
выполняет относительно медленно, но обладает более широкой функциональностью, чем ArrayList
.Пример работы с 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);