Java LinkedList 底层双向链表怎么实现增删改查

风雪姑娘_3705

风雪姑娘_3705

2026-09-09

204人浏览

原创

java中linkedlist基于双向链表实现,增删操作时间复杂度为o(1)(已知节点引用),按索引查找为o(n),其node节点含item、prev、next字段,首尾节点由first和last直接维护。

java linkedlist 底层双向链表怎么实现增删改查

Java 中的 LinkedList 是基于双向链表实现的,它的增删改查操作都围绕节点(Node)的指针操作展开,不涉及数组扩容或移动元素,因此插入和删除在任意位置都是 O(1)(前提是已知节点引用),但按索引查找是 O(n)。

节点结构:双向链表的核心

LinkedList 内部定义了一个私有静态内部类 Node:

private static class Node<e> {
    E item;
    Node<e> next;
    Node<e> prev;

    Node(Node<e> prev, E element, Node<e> next) {
        this.item = element;
        this.next = next;
        this.prev = prev;
    }
}
</e></e></e></e></e>

每个节点保存数据(item)、前驱(prev)和后继(next)引用。头节点(first)和尾节点(last)由两个成员变量直接维护,初始为 null。

Alibabacloud Sdk Client Initialization For Java
Alibabacloud Sdk Client Initialization For Java

在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。

下载

添加元素:从头、尾或中间插入

添加本质是创建新节点,并调整相邻节点的 prev 和 next 指针。

  • addFirst(e):新建节点,next 指向原 first,若原 first 非空则其 prev 指向新节点;更新 first = newNode;若原链表为空,last 也指向新节点。
  • addLast(e)(即 add(e)):类似,新节点 prev 指向原 last,原 last.next 指向它;更新 last;空链表时同步更新 first。
  • add(index, e):先调用 node(index) 查找插入位置的前一个节点(或后一个),再执行“两步断连+四步重连”——断开前后连接,让新节点接入,再修复邻居指针。例如在中间插入:pred.next = newNode,newNode.prev = pred,newNode.next = succ,succ.prev = newNode。

删除元素:跳过目标节点,重连前后

删除某节点(如 removeFirst()、removeLast() 或 remove(index))只需让其前后节点互相指向,再将该节点字段置 null(帮助 GC)。

  • removeFirst():若非空,取 first.item,令 first = first.next;若新 first 为 null,说明删完为空,则 last = null;否则原 first.prev = null。
  • remove(index):先 node(index) 定位节点 x,记其 prev 为 pred、next 为 next;然后 pred.next = next,next.prev = pred;若 pred 为 null,说明删的是头节点,更新 first;若 next 为 null,更新 last。

查找与修改:依赖遍历,无随机访问优化

LinkedList 没有索引数组,所有按位置操作都要从头或尾开始走指针。

  • get(index):调用私有方法 node(int index)。它会判断 index 更靠近头还是尾(比较 index 与 size >> 1),决定从 first 正向遍历还是从 last 反向遍历,减少一半平均步数。
  • set(index, e):先 node(index) 找到节点,再直接替换其 item 字段,O(1) 修改本身,但查找仍是 O(n)。
  • 注意:contains(e)、indexOf(e) 等方法都需要逐个 equals() 比较,最坏 O(n)。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

9497

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

6662

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

5912

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1044

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

868

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1236

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2489

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19831

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1135

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习