Java中的LinkedList(链表)(如果想知道Java中有关LinkedList的知识点,那么只看这一篇就足够了!)
创始人
2025-01-11 13:07:56
0

        前言:在Java编程语言中,Java集合框架提供了一组丰富的数据结构,以满足各种应用需求。其中,LinkedList作为一种常用的数据结构,具有独特的优势和广泛的应用场景。


✨✨✨这里是秋刀鱼不做梦的BLOG

✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客

先让我们看一下本文大致的讲解内容:

目录

1.LinkedList的初识

2.LinkedList的创建

3.LinkedList中的常见API

(1)添加元素

(2)删除元素

(3)修改元素

(4)获取元素

4.LinkedList的遍历

(1)使用 for 循环

(2)使用增强型 for 循环

(3)使用 Iterator

(4)使用 ListIterator

(5)直接打印

5.LinkedList与ArrayList的区别


1.LinkedList的初识

        在开始学习LinkedList之前,让我们先了解一下什么是LinkedList:

        LinkedList(双向链表)是一种基于链表实现的线性数据结构,与ArrayList(顺序表)等基于数组实现的结构不同,它通过节点的引用来管理元素的存储和连接。

        其中每个节点包含三个主要部分:数据部分、指向下一个节点的指针(next)和指向前一个节点的指针(prev)。

下图很好的展示了什么是通过节点的引用来管理元素的存储和连接以及双向链表的构成:

       —— 通过上边的解释,我相信读者你已经对LinkedList(双向链表)有了自己的初步认知,那么接下来我们从LinkedList在整个集合框架中与其他类与接口的关系来继续介绍LinkedList(双向链表)

LinkedList与其他类与接口的关系:

从上图中我们可以了解到:

1.  LinkedList实现了List接口;
2.  LinkedList的底层使用了双向链表;
3.  LinkedList没有实现RandomAccess接口,因此LinkedList不支持随机访问;

        通过上边的简单介绍,相信读者已经大致的了解了Java中的LinkedList,那么接下来让我们开始正式的来学习Java中的LinkedList(双向链表)吧。

2.LinkedList的创建

        在Java中创建LinkedList有两种方式:

方法解释
LinkedList()无参构造
public LinkedList(Collection c)使用其他集合容器中元素构造List

(1)让我们使用一个案例来看一下使用空参创建LinkedList的方式:

import java.util.LinkedList;  public class LinkedListExample {     public static void main(String[] args) {         // 创建一个空的LinkedList         LinkedList linkedList = new LinkedList<>();          // 添加一些元素到LinkedList中         linkedList.add("Element 1");         linkedList.add("Element 2");         linkedList.add("Element 3");          // 输出LinkedList         System.out.println("LinkedList: " + linkedList);     } } 

(2)让我们使用一个案例来看一下使用使用其他集合容器中元素构造创建LinkedList的方式:

import java.util.LinkedList; import java.util.ArrayList;  public class LinkedListFromCollection {     public static void main(String[] args) {         // 创建一个ArrayList并添加一些元素         ArrayList arrayList = new ArrayList<>();         arrayList.add("Element 1");         arrayList.add("Element 2");         arrayList.add("Element 3");          // 使用ArrayList创建一个LinkedList         LinkedList linkedList = new LinkedList<>(arrayList);          // 输出LinkedList         System.out.println("LinkedList: " + linkedList);     } } 

        ——这样我们就大致的了解了如何创建LinkedList了。

3.LinkedList中的常见API

        了解完如何创建一个LinkedList之后,让我们开始学习如何去操作所创建好的LinkedList。以下我们将会从增删查改四个方面来解释有关LinkedList的常用API。

(1)添加元素

  • add(E e): 在链表末尾添加元素。

  • add(int index, E element): 在指定位置插入元素。

  • addFirst(E e): 在链表头部添加元素。

  • addLast(E e): 在链表尾部添加元素。

接下来让我们使用案例来帮助你进一步理解:

import java.util.LinkedList;  public class LinkedListAddExample {     public static void main(String[] args) {         LinkedList linkedList = new LinkedList<>();                  // 在末尾添加元素         linkedList.add("Element 1");         linkedList.add("Element 2");                  // 在指定位置插入元素         linkedList.add(1, "Inserted Element");                  // 在头部添加元素         linkedList.addFirst("First Element");                  // 在尾部添加元素         linkedList.addLast("Last Element");                  //打印结果         System.out.println("final: " + linkedList);     } } 

(2)删除元素

  • remove(): 移除并返回链表的第一个元素。

  • remove(int index): 移除并返回指定位置的元素。

  • removeFirst(): 移除并返回链表的第一个元素。

  • removeLast(): 移除并返回链表的最后一个元素。

让我们使用案例来帮助你进一步理解:

import java.util.LinkedList;  public class LinkedListRemoveExample {     public static void main(String[] args) {         LinkedList linkedList = new LinkedList<>();                  linkedList.add("Element 1");         linkedList.add("Element 2");         linkedList.add("Element 3");                  System.out.println("Initial LinkedList: " + linkedList);                  // 移除并返回第一个元素         String removedElement = linkedList.remove();         System.out.println("Removed Element: " + removedElement);                  // 移除指定位置的元素         String removedIndexElement = linkedList.remove(1);         System.out.println("Removed Element at Index 1: " + removedIndexElement);                  // 移除第一个元素         linkedList.addFirst("New First Element");         String removedFirstElement = linkedList.removeFirst();         System.out.println("Removed First Element: " + removedFirstElement);                  // 移除最后一个元素         String removedLastElement = linkedList.removeLast();         System.out.println("Removed Last Element: " + removedLastElement);                  //打印结果         System.out.println("final: " + linkedList);     } } 

(3)修改元素

  • set(int index , E element): 修改指定索引位置的元素。

让我们使用案例来帮助你进一步理解:

import java.util.LinkedList;  public class LinkedListSetExample {     public static void main(String[] args) {         // 创建一个LinkedList并添加一些元素         LinkedList linkedList = new LinkedList<>();         linkedList.add("Element 1");         linkedList.add("Element 2");         linkedList.add("Element 3");         linkedList.add("Element 4");          // 输出初始的LinkedList         System.out.println("Initial LinkedList: " + linkedList);          // 使用set方法替换索引为2的元素         String oldElement = linkedList.set(2, "New Element");          // 输出被替换的旧元素         System.out.println("Replaced Element: " + oldElement);          // 输出修改后的LinkedList         System.out.println("final: " + linkedList);     } } 

(4)获取元素

  • get(int index): 获取指定位置的元素。

  • getFirst(): 获取第一个元素。

  • getLast(): 获取最后一个元素。

  • indexof(): 获取指定对象的索引(从左到右第一个)

  • lastindexof(): 获取指定对象的索引(从右到左第一个)

  • contains(): 是否包含指定元素

让我们使用案例来帮助你进一步理解:

import java.util.LinkedList;  public class LinkedListGetExample {     public static void main(String[] args) {         LinkedList linkedList = new LinkedList<>();          linkedList.add("Element 1");         linkedList.add("Element 2");         linkedList.add("Element 3");          // 获取指定位置的元素         String elementAtIndex = linkedList.get(1);         System.out.println("Element at Index 1: " + elementAtIndex);          // 获取第一个元素         String firstElement = linkedList.getFirst();         System.out.println("First Element: " + firstElement);          // 获取最后一个元素         String lastElement = linkedList.getLast();         System.out.println("Last Element: " + lastElement);          // 获取指定对象的索引(从左到右第一个)         int index = linkedList.indexOf("Element 1");         System.out.println(index);          // 获取指定对象的索引(从右到左第一个)         int lastindex = linkedList.lastIndexOf("Element 3");         System.out.println(lastindex);          // 是否包含指定元素         boolean contains = linkedList.contains("Element 2");         System.out.println(contains);     } } 

通过上边的案例加上解释,相信读者已经了解了Java中LinkedList中的常用API该如何使用了。

4.LinkedList的遍历

        在Java中遍历LinkedList的方式有五种:分别是使用 for 循环、使用增强型 for 循环、使用 Iterator、使用 ListIterator、以及直接打印。

        ——接下来让我们一个一个来进行讲解:

(1)使用 for 循环

import java.util.LinkedList;  public class Main {     public static void main(String[] args) {         LinkedList list = new LinkedList();         list.add(1);         list.add(2);         list.add(3);         list.add(4);         list.add(5);          // 使用 for 循环遍历 LinkedList         for (int i = 0; i < list.size(); i++) {             System.out.println(list.get(i));         }     } } 

(2)使用增强型 for 循环

import java.util.LinkedList;  public class Main {     public static void main(String[] args) {         LinkedList list = new LinkedList();         list.add(1);         list.add(2);         list.add(3);         list.add(4);         list.add(5);          // 使用增强型 for 循环遍历 LinkedList         for (Integer element : list) {             System.out.println(element);         }     } } 

(3)使用 Iterator

import java.util.LinkedList; import java.util.Iterator;  public class Main {     public static void main(String[] args) {         LinkedList list = new LinkedList();         list.add(1);         list.add(2);         list.add(3);         list.add(4);         list.add(5);          // 使用 Iterator 遍历 LinkedList         Iterator iterator = list.iterator();         while (iterator.hasNext()) {             System.out.println(iterator.next());         }     } }

(4)使用 ListIterator

import java.util.LinkedList; import java.util.ListIterator;  public class Main {     public static void main(String[] args) {         LinkedList list = new LinkedList();         list.add(1);         list.add(2);         list.add(3);         list.add(4);         list.add(5);          // 使用 ListIterator 从前向后遍历 LinkedList         ListIterator listIterator = list.listIterator();         while (listIterator.hasNext()) {             System.out.println(listIterator.next());         }          // 使用 ListIterator 从后向前遍历 LinkedList         while (listIterator.hasPrevious()) {             System.out.println(listIterator.previous());         }     } } 

(5)直接打印

import java.util.LinkedList;  public class Main {     public static void main(String[] args) {         LinkedList list = new LinkedList();         list.add(1);         list.add(2);         list.add(3);         list.add(4);         list.add(5);          // 直接使用 System.out.println 打印 LinkedList         System.out.println(list);     } } 

——以上就是Java中遍历LinkedList的五种方式。

5.LinkedList与ArrayList的区别

        在学习完了LinkedList之后,有读者就会发问,LinkedList和之前的ArrayList有什么区别呢?以下为LinkedList与ArrayList的区别:

不同点ArrayListLinkedList
存储空间上物理上一定连续逻辑上连续,但物理上不一定连续
随机访问支持O(1)不支持:O(N)
头插需要搬移元素,效率低O(N)只需修改引用的指向,时间复杂度为O(1)
插入空间不够时需要扩容没有容量的概念
应用场景元素高效存储+频繁访问任意位置插入和删除频繁

        以上就是LinkedList和之前的ArrayList的区别,读者要在合适的情况下选择合适的数据结构来进行操作。


以上就是本篇文章的全部内容了~~~

相关内容

热门资讯

推荐练习!广西友乐软件辅助,微... 推荐练习!广西友乐软件辅助,微信微乐辅助器免费安装,详细教程(有挂规律)小薇(辅助器软件下载)致您一...
详情窍门!老友广东潮汕麻雀辅助... 详情窍门!老友广东潮汕麻雀辅助,樱花之盛辅助器,详细教程(有挂实锤);运老友广东潮汕麻雀辅助辅助工具...
有挂方式!边锋斗地主插件辅助脚... 有挂方式!边锋斗地主插件辅助脚本,欢乐达人暗堡破解,详细教程(发现有挂)1、许多玩家不知道边锋斗地主...
关于方针!陕麻圈辅助开挂软件,... 关于方针!陕麻圈辅助开挂软件,小闲川南辅助工具,详细教程(有挂秘笈)1、在陕麻圈辅助开挂软件插件功能...
揭幕方式!赣湘互娱透视挂,神兽... 揭幕方式!赣湘互娱透视挂,神兽互娱辅助免费,详细教程(存在有挂)1、神兽互娱辅助免费免费辅助多个强度...
开挂举措!广东雀神麻雀控制器,... 开挂举措!广东雀神麻雀控制器,老友广东辅助器,详细教程(有挂解密)广东雀神麻雀控制器脚本下载中分为三...
关于攻略!多乐找刺激捕鱼辅助,... 您好,多乐找刺激捕鱼辅助这款游戏可以开挂的,确实是有挂的,需要了解加去威信【485275054】很多...
了解教材!九神大厅辅助,全民比... 了解教材!九神大厅辅助,全民比鸡bug,详细教程(有挂教学)所有人都在同一条线上,像星星一样排成一排...
解谜演示!微信小程序有挂吗辅助... 解谜演示!微信小程序有挂吗辅助,hhpoker辅助器,详细教程(确实有挂)1、用户打开应用后不用登录...
了解模块!途游小程序辅助器,广... 了解模块!途游小程序辅助器,广西友乐辅助app,详细教程(真实有挂)1、途游小程序辅助器免费脚本咨询...