LinkedList — одна из самых полезных структур данных в программировании на языке Java. Она представляет собой коллекцию элементов, упорядоченных в последовательность, где каждый элемент содержит ссылку на следующий элемент. Эта структура данных позволяет эффективно добавлять, удалять и получать элементы, делая ее идеальным выбором для многих приложений.
В этом руководстве мы рассмотрим, как создать LinkedList в Java с нуля. Мы покажем вам, как объявить список, добавить элементы, удалить элементы, пройти по всем элементам и многое другое. Независимо от того, новичок вы или опытный разработчик, вы найдете здесь все, что необходимо для начала использования LinkedList.
Мы начнем с основ. Вы узнаете, как создавать экземпляры LinkedList, как добавлять элементы в конец списка и вставлять их в произвольное место. Вы также научитесь удалять элементы из списка и перебирать его содержимое с помощью итератора. Мы рассмотрим разные сценарии использования LinkedList и покажем вам примеры кода для каждого из них.
Основные понятия и преимущества LinkedList
Основные понятия, связанные с LinkedList:
- Узел (Node): основная единица LinkedList, содержит данные элемента и ссылки на предыдущий и следующий узлы.
- Голова (Head): первый узел в LinkedList.
- Хвост (Tail): последний узел в LinkedList.
- Размер (Size): количество узлов в LinkedList.
Преимущества LinkedList:
- Динамический размер: LinkedList могут динамически увеличиваться или уменьшаться в размере, так как узлы могут быть легко добавлены или удалены.
- Быстрая вставка и удаление: вставка и удаление узлов в LinkedList имеют постоянное время выполнения, O(1), в отличие от ArrayList, который имеет линейное время выполнения, O(n).
- Удобный доступ к элементам: LinkedList обеспечивают быстрый доступ к элементам, которые находятся в начале или конце списка, за счет прямого доступа к голове или хвосту. Однако доступ к элементам по индексу занимает линейное время выполнения, O(n).
- Использование памяти: LinkedList требуют дополнительной памяти для хранения ссылок на предыдущий и следующий узлы, что может оказаться неэффективным при работе с большими объемами данных.
LinkedList являются удобным выбором, когда требуется частая вставка или удаление элементов, но медленный доступ к элементам по индексу не является критически важным.
Создание LinkedList в Java
Для создания LinkedList в Java, необходимо сначала импортировать соответствующий класс:
import java.util.LinkedList;
Затем можно создать экземпляр LinkedList, указав тип данных элементов, которые будут храниться в списке:
LinkedList<String> myList = new LinkedList<>();
Используя этот экземпляр, вы можете добавлять, удалять и изменять элементы в списке. Чтобы добавить элемент в список, вы можете использовать метод add():
myList.add("Элемент 1");
myList.add("Элемент 2");
myList.add("Элемент 3");
Чтобы получить элемент из списка, вы можете использовать метод get():
String firstElement = myList.get(0);
Метод get() возвращает элемент из списка по указанному индексу (индексация начинается с 0).
Чтобы изменить элемент списка, вы можете использовать метод set():
myList.set(1, "Новый элемент");
Метод set() заменяет элемент в указанной позиции новым элементом.
Чтобы удалить элемент из списка, вы можете использовать метод remove():
myList.remove(2);
Метод remove() удаляет элемент из указанной позиции.
LinkedList также предоставляет ряд других полезных методов, таких как size() для получения размера списка, contains() для проверки наличия элемента в списке, clear() для удаления всех элементов из списка и т. д.
Теперь вы знаете, как создать LinkedList в Java и как осуществлять основные операции с этой структурой данных. Остается только приступить к использованию их в ваших проектах!
Шаг 1: Импортирование необходимых библиотек
Перед тем, как начать создание LinkedList в Java, необходимо импортировать необходимые библиотеки. Для работы с LinkedList нам понадобятся две основные библиотеки:
java.util.LinkedList и java.util.List.
Библиотека java.util.LinkedList предоставляет нам класс LinkedList, который будет использоваться для создания и работы с LinkedList. Библиотека java.util.List дает нам доступ к интерфейсу List, который LinkedList реализует.
Для импортирования этих библиотек, добавьте следующие строки кода в начало вашего Java-файла:
import java.util.LinkedList;
import java.util.List;
После того, как вы импортируете эти библиотеки, вы будете готовы к созданию и использованию LinkedList в вашей программе.
Шаг 2: Создание класса LinkedList
Чтобы создать LinkedList, мы должны определить его структуру и методы. В качестве примера, давайте создадим LinkedList, которая будет хранить целые числа. В каждом узле LinkedList будет храниться значение и ссылка на следующий узел.
Ниже приведен код для создания класса LinkedList:
public class LinkedList {
private Node head;
private class Node {
private int data;
private Node next;
public Node(int data) {
this.data = data;
next = null;
}
}
// Добавление элемента в LinkedList
public void add(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
} else {
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
}
// Метод для отображения элементов LinkedList
public void display() {
Node current = head;
while (current != null) {
System.out.print(current.data + " ");
current = current.next;
}
System.out.println();
}
}
В этом коде мы определили класс LinkedList и его внутренний класс Node. В классе Node мы определили два поля — data (оно будет хранить значение элемента) и next (оно будет ссылаться на следующий узел LinkedList).
В классе LinkedList мы создали метод add, который добавляет новый узел в LinkedList. Если LinkedList пуст, новый узел просто становится головным. В противном случае мы перебираем узлы LinkedList до последнего и добавляем новый узел.
Теперь у вас есть готовый класс LinkedList, который может хранить целые числа. Мы готовы приступить к созданию объекта LinkedList и добавлению элементов в него. Об этом мы поговорим в следующем разделе.
Шаг 3: Добавление элементов в LinkedList
После того, как вы создали LinkedList, вы можете добавлять элементы в список. Добавление элементов осуществляется с помощью метода add(). Этот метод принимает элемент, который вы хотите добавить в список.
Вот как выглядит пример использования метода add():
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
// Создание LinkedList
LinkedList linkedList = new LinkedList<>();
// Добавление элементов в список
linkedList.add("Элемент 1");
linkedList.add("Элемент 2");
linkedList.add("Элемент 3");
}
}
В этом примере мы создаем LinkedList с типом данных String и добавляем три элемента: «Элемент 1», «Элемент 2» и «Элемент 3».
Метод add() также возвращает значение true, если элемент успешно добавлен в список. Вы можете использовать это значение для проверки успешности добавления.
Вы можете добавлять элементы в LinkedList как в начало списка, так и в конец. Для этого существуют методы addFirst() и addLast(). Вот пример использования этих методов:
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
// Создание LinkedList
LinkedList linkedList = new LinkedList<>();
// Добавление элементов в начало списка
linkedList.addFirst("Элемент 1");
linkedList.addFirst("Элемент 2");
// Добавление элемента в конец списка
linkedList.addLast("Элемент 3");
}
}
В этом примере мы добавляем два элемента в начало списка с помощью метода addFirst(), а затем добавляем один элемент в конец списка с помощью метода addLast().
Теперь вы знаете, как добавлять элементы в LinkedList! Вы можете использовать эти знания, чтобы строить свои собственные списки с помощью LinkedList в Java.
Шаг 4: Удаление элементов из LinkedList
В LinkedList есть несколько методов для удаления элементов из списка:
Метод | Описание |
---|---|
remove() | Удаляет первый элемент в списке, который равен заданному объекту. Возвращает true, если элемент был удален. |
removeFirst() | Удаляет первый элемент в списке. Возвращает удаленный элемент. |
removeLast() | Удаляет последний элемент в списке. Возвращает удаленный элемент. |
removeFirstOccurrence() | Удаляет первый элемент в списке, который равен заданному объекту. Возвращает true, если элемент был удален. |
removeLastOccurrence() | Удаляет последний элемент в списке, который равен заданному объекту. Возвращает true, если элемент был удален. |
Ниже приведены примеры использования этих методов:
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("Элемент 1");
linkedList.add("Элемент 2");
linkedList.add("Элемент 3");
linkedList.remove(); // Удаляет первый элемент в списке
linkedList.removeFirst(); // Удаляет первый элемент в списке
linkedList.removeLast(); // Удаляет последний элемент в списке
linkedList.add("Элемент 1");
linkedList.add("Элемент 2");
linkedList.add("Элемент 3");
linkedList.removeFirstOccurrence("Элемент 2"); // Удаляет первый элемент "Элемент 2"
linkedList.removeLastOccurrence("Элемент 2"); // Удаляет последний элемент "Элемент 2"
Теперь вы знаете, как удалять элементы из LinkedList в Java. Эти методы позволяют удобно управлять содержимым списка.
Особенности работы с LinkedList
- LinkedList представляет собой двусвязный список, где каждый элемент содержит ссылку на предыдущий и следующий элементы.
- Поскольку LinkedList не использует фиксированную память для хранения элементов, он может изменять свой размер динамически.
- Добавление элемента в LinkedList происходит очень эффективно, поскольку достаточно изменить ссылки у соседних элементов.
- Удаление элемента из LinkedList также происходит эффективно благодаря отсутствию необходимости перемещать остальные элементы.
- LinkedList хорошо подходит для случаев, когда требуется частое добавление и удаление элементов в середине списка.
- Доступ к элементам LinkedList выполняется по индексу, но такая операция может быть долгой, поскольку придется пройти через все предыдущие элементы.
- LinkedList имеет больший объем памяти, чем ArrayList, поскольку каждый элемент содержит ссылки на предыдущий и следующий элементы.
- Использование итераторов с LinkedList является оптимальным способом обхода всех элементов в порядке добавления.
- LinkedList можно использовать в качестве стека или очереди, добавляя и удаляя элементы только с одного конца.
- Однако LinkedList не является потокобезопасным, поэтому для многопоточного использования рекомендуется использовать классы из пакета java.util.concurrent.
Преимущества и недостатки LinkedList
Преимущества LinkedList:
- Эффективность операций добавления и удаления элементов в середине списка. В отличие от массива, где такие операции могут быть затратными, в LinkedList они выполняются за постоянное время O(1).
- Гибкость. LinkedList позволяет быстро изменять размер списка, добавлять и удалять элементы без перераспределения и копирования всего списка.
- Итерация по списку. LinkedList позволяет эффективно осуществлять последовательную обработку всех элементов.
Недостатки LinkedList:
- Потребление памяти. Каждый элемент списка в LinkedList требует дополнительной памяти для хранения ссылок на предыдущий и следующий элементы.
- Доступ к элементам. В отличие от массива, где доступ к элементу осуществляется за постоянное время O(1), в LinkedList для доступа к элементу требуется проходить по списку от начала или конца, что занимает время O(n), где n — длина списка.
- Отсутствие прямой индексации. В LinkedList отсутствует возможность получения элемента по его индексу за постоянное время, как это возможно в массиве. Если требуется доступ к элементу по индексу, необходимо выполнять поиск по списку.