前言
在 Java 集合框架中,LinkedList 是一个功能强大的数据结构。如果你已经掌握了顺序表(如 ArrayList)的基础,理解链表会更容易一些。我们将从集合框架出发,深入探讨 LinkedList 的底层结构与实战用法。
一、Java 集合框架概览
Java 集合体系主要分为 Collection(单列集合) 和 Map(双列集合) 两大分支。
核心接口与分类
- Collection:单列集合的根接口,定义了增删改查、遍历等基本操作。
- 子接口包括 List(有序可重复)、Set(无序不可重复)、Queue(队列)。
- Map:存储键值对(Key-Value),Key 唯一,Value 可重复。
- 子接口包括 SortedMap(键有序)。
今天我们将重点聚焦于 LinkedList。
LinkedList 的核心特性
-
实现的接口
- 实现了
List接口:具备列表的增删改查能力,支持索引访问。 - 实现了
Deque接口:同时具备双端队列的特性,可作为栈或队列使用。
- 实现了
-
核心特点
- 结构:基于双向链表,每个节点存储前驱和后继节点的引用,无容量限制。
- 访问效率:随机访问(通过索引
get(i))效率较低(时间复杂度 O(n)),因为需要遍历链表。 - 增删效率:在链表两端或已知节点附近增删元素效率高(时间复杂度 O(1))。
- 线程安全:非线程安全,多线程环境下需手动同步。
二、链表的数据结构基础
在数据结构中,链表是用非连续的存储单元存储元素的线性表。Java 中的 LinkedList 正是这一概念的具体实现。
关键概念
- 节点(Node):链表的基本存储单元,包含两部分:
- 数据域:存储实际的业务数据(整数、字符串或自定义对象)。
- 指针域:存储下一个(或上一个)节点的内存地址/引用,用于建立关联。
- 头指针:指向链表第一个节点的引用,是访问整个链表的入口。
- 尾节点:链表的最后一个节点,其指针域通常指向
null(单向链表)。
三、手动实现链表逻辑
为了深入理解,我们可以尝试手动实现一个无头结点的单向链表。熟悉了这个逻辑,其他类型的链表也就水到渠成了。
建议将代码拆分为 基本成员变量、成员方法 和 辅助方法 进行学习。
1. 节点定义
static class ListNode {
int val;
ListNode next;
// 构造方法实例化节点
public {
.val = val;
}
}
ListNode head;


