欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > Java中的LinkedList(链表)(如果想知道Java中有关LinkedList的知识点,那么只看这一篇就足够了!)

Java中的LinkedList(链表)(如果想知道Java中有关LinkedList的知识点,那么只看这一篇就足够了!)

2025/9/28 10:58:24 来源:https://blog.csdn.net/2302_80198073/article/details/140356991  浏览:    关键词:Java中的LinkedList(链表)(如果想知道Java中有关LinkedList的知识点,那么只看这一篇就足够了!)

        前言:在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<? extends E> c)使用其他集合容器中元素构造List

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

import java.util.LinkedList;public class LinkedListExample {public static void main(String[] args) {// 创建一个空的LinkedListLinkedList<String> linkedList = new LinkedList<>();// 添加一些元素到LinkedList中linkedList.add("Element 1");linkedList.add("Element 2");linkedList.add("Element 3");// 输出LinkedListSystem.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<String> arrayList = new ArrayList<>();arrayList.add("Element 1");arrayList.add("Element 2");arrayList.add("Element 3");// 使用ArrayList创建一个LinkedListLinkedList<String> linkedList = new LinkedList<>(arrayList);// 输出LinkedListSystem.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<String> 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<String> 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<String> linkedList = new LinkedList<>();linkedList.add("Element 1");linkedList.add("Element 2");linkedList.add("Element 3");linkedList.add("Element 4");// 输出初始的LinkedListSystem.out.println("Initial LinkedList: " + linkedList);// 使用set方法替换索引为2的元素String oldElement = linkedList.set(2, "New Element");// 输出被替换的旧元素System.out.println("Replaced Element: " + oldElement);// 输出修改后的LinkedListSystem.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<String> 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<Integer> list = new LinkedList<Integer>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);// 使用 for 循环遍历 LinkedListfor (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<Integer> list = new LinkedList<Integer>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);// 使用增强型 for 循环遍历 LinkedListfor (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<Integer> list = new LinkedList<Integer>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);// 使用 Iterator 遍历 LinkedListIterator<Integer> 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<Integer> list = new LinkedList<Integer>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);// 使用 ListIterator 从前向后遍历 LinkedListListIterator<Integer> listIterator = list.listIterator();while (listIterator.hasNext()) {System.out.println(listIterator.next());}// 使用 ListIterator 从后向前遍历 LinkedListwhile (listIterator.hasPrevious()) {System.out.println(listIterator.previous());}}
}

(5)直接打印

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

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

5.LinkedList与ArrayList的区别

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

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

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


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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词