Рубрики
Без рубрики

Java LinkedList – Список ссылок На Java

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

Автор оригинала: Pankaj Kumar.

Java LinkedList-это реализация интерфейсов List и Deque. Это один из часто используемых классов реализации списка.

Он расширяет абстрактный список и реализует интерфейсы List и Deque. Это упорядоченная коллекция, которая поддерживает повторяющиеся элементы. Он хранит элементы в порядке вставки. Он поддерживает добавление нулевых элементов. Он поддерживает операции на основе индексов.

Если вы хотите узнать больше об основах списка, пожалуйста, просмотрите этот пост: Список Java .

Опубликуйте Краткое содержание

В этом посте мы обсудим следующие концепции.

  • Список ссылок на Java
  • Диаграмма классов Java LinkedList
  • Методы списка Java LinkedList
  • Методы определения списка ссылок Java
  • Базовый пример Связанного списка Java
  • Общий список ссылок Java
  • Массив Java в связанный список
  • Java LinkedList toArray
  • Примеры использования Java LinkedList в реальном времени
  • Внутреннее представление Java LinkedList
  • Как работает вставка в Java LinkedList?
  • Как работает удаление в Java LinkedList?
  • Операции удаления списка ссылок Java
  • Java SE 8: Список ссылок Java для потоковой передачи
  • Связанный список Java SE 9

Список ссылок на Java

В этом разделе мы обсудим некоторые важные моменты, касающиеся Java LinkedList:

  • Класс Java LinkedList является членом платформы коллекций Java.
  • Это реализация интерфейсов List и Deque.
  • Внутренне это реализованная структура данных с использованием Двусвязного списка.
  • Он поддерживает дубликаты элементов.
  • Он хранит или поддерживает свои элементы в порядке вставки.
  • Мы можем добавить любое количество нулевых элементов.
  • Он не синхронизирован, что означает, что он не является потокобезопасным.
  • Мы можем создать синхронизированный список ссылок, используя коллекции.Метод synchronizedList ().
  • В приложениях Java мы можем использовать его как список, стек или очередь.
  • Он не реализует интерфейс RandomAccess. Таким образом, мы можем получать доступ к элементам только в последовательном порядке. Он не поддерживает случайный доступ к элементам.
  • Когда мы пытаемся получить доступ к элементу из связанного списка, поиск этого элемента начинается с начала или конца списка ссылок в зависимости от того, где доступны эти элементы.
  • Мы можем использовать ListIterator для перебора элементов LinkedList.
  • Начиная с Java SE 8 и далее, мы можем конвертировать связанный список в поток и наоборот.
  • Java SE 9 собирается добавить пару заводских методов для создания неизменяемого связанного списка.

Диаграмма классов Java LinkedList

Как мы знаем, Java LinkedList является одним из классов реализации списка. Он также реализует Deque. Как показано на диаграмме классов ниже, он НЕ распространяется непосредственно на класс AbstractList. Он расширяет класс abstractsequentialist.

Методы списка Java LinkedList

В этом разделе мы обсудим некоторые полезные и часто используемые методы Java LinkedList.

Следующие методы наследуются от интерфейса списка или коллекции:

  1. int size(): чтобы получить количество элементов в списке.
  2. логическое значение isEmpty(): чтобы проверить, пуст ли список или нет.
  3. логическое значение содержит(объект o): Возвращает значение true, если этот список содержит указанный элемент.
  4. Итератор итератор(): Возвращает итератор по элементам в этом списке в правильной последовательности.
  5. Объект[] toArray(): Возвращает массив, содержащий все элементы в этом списке в правильной последовательности.
  6. логическое добавление(E e): Добавляет указанный элемент в конец этого списка.
  7. логическое удаление(Объект o): Удаляет первое вхождение указанного элемента из этого списка.
  8. логическое значение retainAll(коллекция c): Сохраняет только элементы в этом списке, содержащиеся в указанной коллекции.
  9. void clear(): Удаляет все элементы из списка.
  10. E get(индекс int): Возвращает элемент в указанной позиции в списке.
  11. Набор E(индекс int, элемент E): Заменяет элемент в указанной позиции в списке указанным элементом.
  12. ListIterator ListIterator(): Возвращает итератор списка по элементам в списке.
  13. Подсписок списка(int fromIndex, int toIndex): Возвращает представление части этого списка между указанным fromIndex, включительно, и toIndex, эксклюзивно. Возвращенный список поддерживается этим списком, поэтому неструктурные изменения в возвращенном списке отражаются в этом списке, и наоборот.

Методы определения списка ссылок Java

Следующие методы специфичны для класса LinkedList, которые наследуются от интерфейса Deque:

  1. void addFirst(E e): Вставляет указанный элемент в начало этого списка.
  2. void addLast(E e): Вставляет указанный элемент в конец этого списка.
  3. E getFirst(): Извлекает, но не удаляет первый элемент этого списка. Этот метод отличается от peekFirst только тем, что он создает исключение, если этот список пуст.
  4. E getLast(): Извлекает, но не удаляет последний элемент этого списка. Этот метод отличается от peekLast только тем, что он создает исключение, если этот список пуст.
  5. E removefirst(): Удаляет и возвращает первый элемент из этого списка.
  6. E removeLast(): Удаляет и возвращает последний элемент из этого списка.
  7. логическое предложение сначала(E e): Вставляет указанный элемент в начало этого списка.
  8. логическое предложение(E e): Вставляет указанный элемент в конец этого списка.
  9. E pollFirst(): Извлекает и удаляет первый элемент этого списка или возвращает значение null, если этот список пуст.
  10. E pollLast(): Извлекает и удаляет последний элемент этого списка или возвращает значение null, если этот список пуст.
  11. E peekFirst(): Извлекает, но не удаляет первый элемент этого списка или возвращает значение null, если этот список пуст.
  12. E peekLast(): Извлекает, но не удаляет последний элемент этого списка или возвращает значение null, если этот список пуст.

Базовый пример Связанного списка Java

В этом разделе мы обсудим базовый пример связанного списка Java. Мы рассмотрим еще несколько полезных операций в следующих разделах.

Пример:-

import java.util.LinkedList;
import java.util.List;

public class LinkedListDemo 
{
  public static void main(String[] args) 
  {
	List names = new LinkedList();
	names.add("Rams");
	names.add("Posa");
	names.add("Chinni");
        names.add(2011);
			
	System.out.println("LinkedList content: " + names);
	System.out.println("LinkedList size: " + names.size());
  }
}

Выход:-

LinkedList content: [Rams, Posa, Chinni, 2011]
LinkedList size: 4

Здесь мы создали объект LinkedList и добавили 4 элемента. Как мы уже обсуждали, метод LinkedList.size() используется для получения количества элементов в списке.

ПРИМЕЧАНИЕ:- Без использования дженериков Java LinkedList поддерживает гетерогенные элементы. Однако не рекомендуется использовать коллекции без дженериков. Давайте рассмотрим преимущества и использование дженериков Java в следующем разделе на одном простом примере.

Общий список ссылок Java

В этом разделе мы обсудим, как использовать универсальные приложения с Java LinkedList. Как мы знаем, генераторы Java полезны для написания Безопасности типов программирования и выполнения более строгих проверок типов во время компиляции. Они также полезны для устранения накладных расходов на литье.

Пример:-

import java.util.LinkedList;
import java.util.List;

public class LinkedListGenericsDemo
{
  public static void main(String[] args) 
  {
	List names = new LinkedList<>();
	names.add("Rams");
	names.add("Posa");
	names.add("Chinni");
        // We cannot add other than Strings
        // names.add(2011);
			
	System.out.println("LinkedList content: " + names);
	System.out.println("LinkedList size: " + names.size());
  }
}

Выход:-

LinkedList content: [Rams, Posa, Chinni]
LinkedList size: 3

Здесь мы создали объект LinkedList с обобщениями и добавили 3 элемента. Когда мы пытаемся добавить номер для Связанного списка, это приводит к ошибке во время компиляции.

Массив Java в связанный список

В этом разделе мы рассмотрим, как преобразовать массив Java в объект связанного списка. Мы можем сделать это многими способами, однако я привел здесь только один подход.

Пример:-


import java.util.LinkedList;
import java.util.List;

public class JavaArrayToLinkedListDemo 
{
	public static void main(String[] args) 
	{
		Integer[] numbers = {1,2,3,4,5};
		List numbersList = new LinkedList<>();
		for(Integer s : numbers){
			numbersList.add(s);
		}
		System.out.println(numbersList);
	}
}

Выход:-

[1, 2, 3, 4, 5]

Java LinkedList toArray

В этом разделе мы рассмотрим, как преобразовать список ссылок Java в массив. Мы можем сделать это многими способами, однако я привел здесь только один подход.

Пример:-

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

public class LinkedListToJavaArrayDemo 
{
	public static void main(String[] args) 
	{		
		List numbersList = new LinkedList<>();
		numbersList.add(1);
		numbersList.add(2);
		numbersList.add(3);
		numbersList.add(4);
		numbersList.add(5);
		Integer[] numbers = new Integer[numbersList.size()];
		
		numbers = numbersList.toArray(numbers);
		System.out.println(Arrays.toString(numbers));

	}
}

Выход:-

[1, 2, 3, 4, 5]

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

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

Наилучший сценарий использования:-

  • Когда наша часто используемая операция-добавление или удаление элементов в середине списка, Связанный список-лучший класс для использования.

Почему? Потому что нам не нужно делать больше сдвигов, чтобы добавлять или удалять элементы в середине списка. Пожалуйста, обратитесь к разделу “Как работает вставка в J Java LinkedList?”, чтобы подробно разобраться в этом.

Наихудший сценарий использования:-

  • Когда наша часто используемая операция-извлечение элементов из списка, список ссылок-худший выбор.

Почему? Поскольку LinkedList поддерживает только последовательный доступ, он НЕ поддерживает произвольный доступ. Пожалуйста, обратитесь к разделу “Как работает удаление в J Java LinkedList?”, чтобы подробно разобраться в этом.

ПРИМЕЧАНИЕ:- LinkedList реализует List, Deque, Клонируемый и сериализуемый. Но он НЕ реализует интерфейс RandomAccess.

Внутреннее представление Java LinkedList

Как мы знаем, внутренне Java LinkedList реализован с использованием Двусвязного списка . Таким образом, связанный список Java представляет свои элементы в виде узлов. Каждый узел разделен на 3 части, как показано ниже.

Здесь каждый узел используется для определенной цели.

  1. Левая часть узла используется для указания на предыдущий Узел (или Элемент) в Связанном списке.
  2. Правая часть узла используется для указания на следующий узел (или Элемент) в Связанном списке.
  3. Часть центрального узла используется для хранения фактических данных.

ПРИМЕЧАНИЕ:- В JVM Связанный список НЕ хранит свои элементы в последовательном порядке. Он хранит свои элементы в любом доступном месте, и они соединены друг с другом с помощью левой и правой частей узла, как показано на приведенной ниже схеме.

Как работает вставка в Java LinkedList?

Мы уже видели, как Связанный список хранит свои элементы в виде Узлов в предыдущем разделе. В этом разделе мы обсудим, как работает внутренняя операция вставки связанного списка Java.

  1. Давайте предположим, что наш первоначальный Связанный список содержит следующие данные.
  2. Выполните следующую операцию вставки в этот Связанный список
  3. Здесь мы пытаемся выполнить операцию вставки, чтобы добавить новый элемент со значением “54” в индексе 2.

  4. Обновленный связанный список выглядит следующим образом.

Как работает удаление в Java LinkedList?

Мы уже видели, как Связанный список выполняет внутреннюю операцию вставки в предыдущем разделе. В этом разделе мы обсудим, как внутренне работает операция удаления связанного списка Java.

  1. Давайте предположим, что наш первоначальный Связанный список содержит следующие данные.
  2. Выполните следующую операцию вставки в этот Связанный список
  3. Здесь мы пытаемся выполнить операцию удаления, чтобы удалить элемент, доступный по индексу 3.

  4. Обновленный связанный список выглядит следующим образом.

Операции удаления списка ссылок Java

Здесь мы рассмотрим, как объект LinkedList работает в качестве Дека. Мы используем эти операции для реализации Очередей или стеков. Мы подробно обсудим, как работает стек или очереди, в моих следующих постах.

Пример:-

import java.util.LinkedList;
import java.util.LinkedList;
import java.util.Deque;

public class LinkedListDequeOperationsDemo 
{
  public static void main(String[] args) 
  {
	Deque names = new LinkedList();
	names.add(2);
	names.addFirst(1);
	names.addLast(3);
	names.addFirst(0);
	names.addLast(4);
			
	System.out.println("LinkedList content: " + names);
	System.out.println("LinkedList size: " + names.size());
	names.removeFirst();
	names.removeLast();
	
	System.out.println("LinkedList content: " + names);
	System.out.println("LinkedList size: " + names.size());	
  }
}

Выход:-

LinkedList content: [0, 1, 2, 3, 4]
LinkedList size: 5
LinkedList content: [1, 2, 3]
LinkedList size: 3

Java SE 8: Список ссылок Java для потоковой передачи

Здесь мы рассмотрим, как преобразовать объект связанного списка в концепцию потока Java SE 8.

Пример:-

import java.util.LinkedList;
import java.util.List;

public class LinkedListToStreamDemo 
{
  public static void main(String[] args) 
  {		
	List numbersList = new LinkedList<>();
	numbersList.add(1);
	numbersList.add(2);
	numbersList.add(3);
	numbersList.add(4);
	numbersList.add(5);
		
	//convert List to stream
	numbersList.stream().forEach(System.out::println);
  }
}

Выход:-

1
2
3
4
5

Связанный список Java SE 9

В Java SE 9 Oracle Corp собирается добавить некоторые полезные служебные методы для создания неизменяемого списка. Если вы хотите изучить их подробно с некоторыми полезными примерами, пожалуйста, просмотрите мой пост по адресу: Java SE 9: Заводские методы для неизменяемого списка

Это все краткое описание LinkedList на Java. Я надеюсь, что эти примеры Java LinkedList помогут вам начать работу с программированием связанных списков.

Спасибо, что прочитали мои учебные пособия. Пожалуйста, напишите мне комментарий, если вам нравятся мои учебные пособия или у вас есть какие-либо вопросы или предложения или какие-либо ошибки типа.