Перейти к основному содержимому

Класс LinkedList

Обобщенный класс LinkedList<E> представляет структуру данных в виде связанного списка. Он наследуется от класса AbstractSequentialList и реализует интерфейсы List, Dequeue и Queue. То есть он соединяет функциональность работы со списком и функциональность очереди.

Класс LinkedList имеет следующие конструкторы:

  • LinkedList(): создает пустой список.
  • LinkedList(Collection<? extends E> col): создает список, в который добавляет все элементы коллекции col.

LinkedList содержит все те методы, которые определены в интерфейсах List, Queue, Deque. Некоторые из них:

  • addFirst() / offerFirst(): добавляет элемент в начало списка.
  • addLast() / offerLast(): добавляет элемент в конец списка.
  • removeFirst() / pollFirst(): удаляет и возвращает первый элемент из начала списка.
  • removeLast() / pollLast(): удаляет и возвращает последний элемент из конца списка.
  • getFirst() / peekFirst(): получает первый элемент списка.
  • getLast() / peekLast(): получает последний элемент списка.

Рассмотрим применение связанного списка:

import java.util.LinkedList;

public class Program {
public static void main(String[] args) {
LinkedList<String> states = new LinkedList<>();

// добавим в список ряд элементов
states.add("Germany");
states.add("France");
states.addLast("Great Britain"); // добавляем на последнее место
states.addFirst("Spain"); // добавляем на первое место
states.add(1, "Italy"); // добавляем элемент по индексу 1

System.out.printf("List has %d elements \n", states.size());
System.out.println(states.get(1));

states.set(1, "Portugal");

for (String state : states) {
System.out.println(state);
}

// проверка на наличие элемента в списке
if (states.contains("Germany")) {
System.out.println("List contains Germany");
}

states.remove("Germany");
states.removeFirst(); // удаление первого элемента
states.removeLast(); // удаление последнего элемента

LinkedList<Person> people = new LinkedList<>();
people.add(new Person("Mike"));
people.addFirst(new Person("Tom"));
people.addLast(new Person("Nick"));
people.remove(1); // удаление второго элемента

for (Person p : people) {
System.out.println(p.getName());
}

Person first = people.getFirst();
System.out.println(first.getName()); // вывод первого элемента
}
}

class Person {
private String name;

public Person(String value) {
name=value;
}

String getName() {
return name;
}
}

Здесь создаются и используются два списка: для строк и для объектов класса Person. При этом в дополнение к методам addFirst/removeLast и т.д., нам также доступны стандартные методы, определенные в интерфейсе Collection: add(), remove, contains, size и другие. Поэтому мы можем использовать разные методы для одного и того же действия. Например, добавление в самое начало списка можно сделать так: states.addFirst("Spain"), а можно сделать так: states.add(0, "Spain").