Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java LinkedList: полное руководство с примерами

Java LinkedList

Узнайте, как использовать Java LinkedList для эффективной манипуляции данными, с практическими примерами кода и лучшими практиками.

Класс LinkedList в Java Collections Framework реализует двусвязный список. Каждый элемент, или узел, содержит три поля:


Создание Java LinkedList

Создайте экземпляр LinkedList с конкретным типом элементов:

LinkedList<Type> list = new LinkedList<>();

Примеры:

// Список целых чисел
LinkedList<Integer> numbers = new LinkedList<>();
// Список строк
LinkedList<String> words = new LinkedList<>();

Пример: создание LinkedList в Java

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> animals = new LinkedList<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Cow");
        System.out.println("LinkedList: " + animals);
    }
}

Вывод

LinkedList: [Dog, Cat, Cow]

Этот код демонстрирует базовый LinkedList с именем animals, заполненный тремя элементами через add().


Как работает Java LinkedList

В отличие от массивов, узлы разбросаны в памяти и связаны вместе. На диаграмме ниже изображены три узла и их связи.

Для более глубокого понимания см. статью Linked List.


Ключевые методы LinkedList

Ниже приведены наиболее часто используемые операции:


1. Добавление элементов

Используйте add() для добавления узла в конец, опционально указывая индекс:

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> animals = new LinkedList<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Cow");
        System.out.println("LinkedList: " + animals);
        animals.add(1, "Horse");
        System.out.println("Updated LinkedList: " + animals);
    }
}

Вывод

LinkedList: [Dog, Cat, Cow] Updated LinkedList: [Dog, Horse, Cat, Cow]

Второй add() вставляет "Horse" в индекс 1, сдвигая последующие элементы.


2. Доступ к элементам

Получите элемент по индексу с помощью get():

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> languages = new LinkedList<>();
        languages.add("Python");
        languages.add("Java");
        languages.add("JavaScript");
        System.out.println("LinkedList: " + languages);
        String str = languages.get(1);
        System.out.print("Element at index 1: " + str);
    }
}

Вывод

LinkedList: [Python, Java, JavaScript] Element at index 1: Java

Итерацию также можно выполнять через iterator() или listIterator() для продвинутого обхода.


3. Обновление элементов

Замените элемент в конкретном индексе с помощью set():

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> languages = new LinkedList<>();
        languages.add("Java");
        languages.add("Python");
        languages.add("JavaScript");
        languages.add("Java");
        System.out.println("LinkedList: " + languages);
        languages.set(3, "Kotlin");
        System.out.println("Updated LinkedList: " + languages);
    }
}

Вывод

LinkedList: [Java, Python, JavaScript, Java] Updated LinkedList: [Java, Python, JavaScript, Kotlin]

4. Удаление элементов

Удалите элемент по индексу с помощью remove():

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> languages = new LinkedList<>();
        languages.add("Java");
        languages.add("Python");
        languages.add("JavaScript");
        languages.add("Kotlin");
        System.out.println("LinkedList: " + languages);
        String removed = languages.remove(1);
        System.out.println("Removed Element: " + removed);
        System.out.println("Updated LinkedList: " + languages);
    }
}

Вывод

LinkedList: [Java, Python, JavaScript, Kotlin] Removed Element: Python New LinkedList: [Java, JavaScript, Kotlin]

Другие полезные методы

МетодОписание
contains()Проверяет наличие значения
indexOf()Индекс первого вхождения
lastIndexOf()Индекс последнего вхождения
clear()Удаляет все элементы
iterator()Предоставляет Iterator

LinkedList как Queue и Deque

Поскольку LinkedList реализует Queue и Deque, он поддерживает операции FIFO и LIFO. Часто используемые методы:

МетодОписание
addFirst()Добавить в начало
addLast()Добавить в конец
getFirst()Посмотреть начало
getLast()Посмотреть конец
removeFirst()Удалить из начала
removeLast()Удалить из конца
peek()Посмотреть голову без удаления
poll()Получить и удалить голову
offer()Поставить в хвост

Пример: LinkedList как Queue

import java.util.LinkedList;
import java.util.Queue;
class Main {
    public static void main(String[] args){
        Queue<String> languages = new LinkedList<>();
        languages.add("Python");
        languages.add("Java");
        languages.add("C");
        System.out.println("LinkedList: " + languages);
        String first = languages.peek();
        System.out.println("Accessed Element: " + first);
        String removed = languages.poll();
        System.out.println("Removed Element: " + removed);
        System.out.println("LinkedList after poll(): " + languages);
        languages.offer("Swift");
        System.out.println("LinkedList after offer(): " + languages);
    }
}

Вывод

LinkedList: [Python, Java, C] Accessed Element: Python Removed Element: Python LinkedList after poll(): [Java, C] LinkedList after offer(): [Java, C, Swift]

Пример: LinkedList как Deque

import java.util.LinkedList;
import java.util.Deque;
class Main {
    public static void main(String[] args){
        Deque<String> animals = new LinkedList<>();
        animals.add("Cow");
        System.out.println("LinkedList: " + animals);
        animals.addFirst("Dog");
        System.out.println("LinkedList after addFirst(): " + animals);
        animals.addLast("Zebra");
        System.out.println("LinkedList after addLast(): " + animals);
        animals.removeFirst();
        System.out.println("LinkedList after removeFirst(): " + animals);
        animals.removeLast();
        System.out.println("LinkedList after removeLast(): " + animals);
    }
}

Вывод

LinkedList: [Cow] LinkedList after addFirst(): [Dog, Cow] LinkedList after addLast(): [Dog, Cow, Zebra] LinkedList after removeFirst(): [Cow, Zebra] LinkedList after removeLast(): [Cow]

Итерация по LinkedList

Улучшенный for-цикл предлагает лаконичный способ обхода элементов:

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> animals = new LinkedList<>();
        animals.add("Cow");
        animals.add("Cat");
        animals.add("Dog");
        System.out.println("LinkedList: " + animals);
        System.out.println("Accessing linked list elements:");
        for(String animal: animals){
            System.out.print(animal + ", ");
        }
    }
}

Вывод

LinkedList: [Cow, Cat, Dog] Accessing linked list elements: Cow, Cat, Dog,

LinkedList против ArrayList

Оба класса реализуют List, но отличаются характеристиками производительности:

LinkedListArrayList
Реализует List, Queue, DequeРеализует List
Узел хранит prev, data, nextОдин элемент на слот массива
Двусвязная структураИзменяемый массив
Вставки/удаления O(1) при известной позицииВставки после индекса требуют сдвига O(n)
Случайный доступ требует обхода O(n)Прямой доступ по индексу O(1)

Примечание: Вы можете создать LinkedList через любой из его интерфейсов:

// через List
List<String> animals1 = new LinkedList<>();
// через Queue
Queue<String> animals2 = new LinkedList<>();
// через Deque
Deque<String> animals3 = new LinkedList<>();

При использовании ссылки интерфейса доступны только методы, определённые этим интерфейсом.

java

  1. Освоение операторов Java: типы, синтаксис и практические примеры
  2. Комментарии в Java: типы, использование и лучшие практики
  3. Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
  4. Освоение строк в Java: создание, методы и лучшие практики
  5. Интерфейсы в Java: концепции, реализация и лучшие практики
  6. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  7. Try-with-resources в Java: автоматическое управление ресурсами
  8. Аннотации в Java: типы, размещение и практические примеры
  9. Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
  10. Понимание Java Vector: использование, особенности и сравнение с ArrayList