Метод get() класса LinkedList в Java

Java LinkedList Java LinkedList


get()Метод находится в JavaLinkedListраспространённый метод, предоставляемый классом, используемый для получения элемента в указанной позиции из связного списка.LinkedListвходит в Java Collections FrameworkListкласс реализации интерфейса, который использует структуру данных двусвязного списка для хранения элементов.

get()Базовый синтаксис метода выглядит следующим образом:

E get(int index)

Где:

  • EУказывает тип элементов в связном списке
  • indexпозиция элемента, который нужно получить (отсчёт с 0)

Как работает метод get()

LinkedListизget()Метод получает элемент в указанной позиции путём обхода связного списка. ПосколькуLinkedListон реализован на основе связного списка, в отличие отArrayListтого, он не может напрямую обращаться к элементам произвольно по индексу.

При вызовеget(index)метод,LinkedListон будет:

  1. Проверять, является ли индекс допустимым (0 ≤ index < size)
  2. Начинать обход с головы или хвоста связного списка (начинать с ближайшего конца)
  3. Переходить от узла к узлу, пока не будет найден узел в указанной позиции
  4. Возвращает элемент, хранящийся в этом узле

Примеры использования

Базовое использование

Пример

import java.util.LinkedList;

public class LinkedListGetExample {
    public static void main(String[] args) {
        // Создаём LinkedList
        LinkedList<String> fruits = new LinkedList<>();
       
        // Добавить элементы
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");
        fruits.add("Durian");
       
        // Используйте метод get() для получения элементов
        String firstFruit = fruits.get(0);  // Получение первого элемента
        String thirdFruit = fruits.get(2);  // Получение третьего элемента
       
        System.out.println(Первый фрукт: + firstFruit);  // Вывод: Apple
        System.out.println(Третий фрукт: + thirdFruit);  // Вывод: Cherry
    }
}

Итерация по LinkedList

Пример

import java.util.LinkedList;

public class LinkedListTraversal {
    public static void main(String[] args) {
        LinkedList<Integer> numbers = new LinkedList<>();
        numbers.add(10);
        numbers.add(20);
        numbers.add(30);
        numbers.add(40);
       
        // Используйте метод get() для перебора LinkedList
        for (int i = 0; i < numbers.size(); i++) {
            System.out.println(№ + i + элемента: + numbers.get(i));
        }
    }
}

Соображения производительности

LinkedListизget()Временная сложность метода — O(n), потому что нужно пройти по связному списку от головы или хвоста, чтобы найти элемент в указанной позиции. Это контрастирует сArrayListO(1) временной сложностью последнего.

Поэтому, если требуется частый произвольный доступ к элементам,ArrayListможет быть лучшим выбором. В то время какLinkedListработает лучше, когда часто выполняются операции вставки и удаления.


Обработка исключений

При использованииget()метода, если переданный индекс выходит за пределы диапазона (index < 0 или index ≥ size), он выброситIndexOutOfBoundsException。

Пример безопасного использования

Пример

import java.util.LinkedList;

public class SafeGetExample {
    public static void main(String[] args) {
        LinkedList<String> colors = new LinkedList<>();
        colors.add("Red");
        colors.add("Green");
        colors.add("Blue");
       
        int index = 3;  // Индекс вне диапазона
       
        try {
            String color = colors.get(index);
            System.out.println(color);
        } catch (IndexOutOfBoundsException e) {
            System.out.println(Ошибка: индекс + index + вне диапазона. Размер списка равен + colors.size());
        }
    }
}

Альтернативные методы

Кроме тогоget()метод,LinkedListКласс LinkedList также предоставляет другие методы для получения элементов:

  1. getFirst(): получить первый элемент
  2. getLast(): получить последний элемент
  3. peek(): получить, но не удалять первый элемент (возвращает null, если список пуст)
  4. peekFirst(): то же, что и peek()
  5. peekLast(): получить, но не удалять последний элемент (возвращает null, если список пуст)

Пример

Пример

import java.util.LinkedList;

public class AlternativeMethods {
    public static void main(String[] args) {
        LinkedList<String> books = new LinkedList<>();
        books.add("Программирование на Java");
        books.add("Структуры данных");
        books.add("Алгоритмы");
       
        System.out.println(Первая книга: + books.getFirst());
        System.out.println(Последняя книга: + books.getLast());
        System.out.println("peek(): " + books.peek());
        System.out.println("peekLast(): " + books.peekLast());
    }
}

Лучшие практики

  1. Избегайте частого использования метода get(): ПосколькуLinkedListизget()этот метод имеет более низкую производительность, если вам нужен частый произвольный доступ, рассмотрите использованиеArrayList。

  2. Используйте итератор для обхода: Когда вам нужно обойтиLinkedListLinkedList, использование итератора более эффективно, чем использованиеget()метода get():

Пример

// Более эффективный способ итерации
for (String fruit : fruits) {
    System.out.println(fruit);
}

// Или используйте итератор
Iterator<String> iterator = fruits.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}
  1. Проверяйте диапазон индекса: Перед использованиемget()метода, лучше проверить, допустим ли индекс:

Пример

if (index >= 0 && index < list.size()) {
    return list.get(index);
} else {
    // Обработка случаев недопустимого индекса
}

Итог

LinkedListизget()Метод является базовым, но важным методом; он позволяет нам получать доступ к элементам связного списка по индексу. Хотя его производительность не так хороша, какArrayListу соответствующего метода, в некоторых сценариях (например, при частых вставках и удалениях)LinkedListон всё ещё остаётся лучшим выбором. Пониманиеget()того, как работает метод, и его характеристики производительности могут помочь нам делать более разумный выбор структур данных в реальной разработке.

Java LinkedList Java LinkedList

Другие расширения