概述
链表是数据结构中线性表的常见实现方式,而 Java 中的 LinkedList 正是基于双向链表实现的集合类。在掌握顺序表(如 ArrayList)的基础上,理解链表能帮助我们更好地处理动态内存分配和频繁插入删除的场景。
一、Java 集合框架概览
Java 集合体系主要分为单列集合(Collection)和双列集合(Map)。
- Collection:根接口,包含 List、Set、Queue 等子接口。
- List:有序且可重复的列表,支持通过索引访问。
- Map:存储键值对,Key 唯一。
本次重点聚焦于 LinkedList,它同时实现了 List 和 Deque 接口,兼具列表和双端队列的特性。
LinkedList 核心特性
- 结构:基于双向链表,节点包含前驱和后继引用,无固定容量限制。
- 访问效率:随机访问(
get(i))需遍历,时间复杂度 O(n);相比数组实现的 ArrayList 较慢。 - 增删效率:在已知节点位置或两端进行增删操作效率高,时间复杂度 O(1)。
- 线程安全:非线程安全,多线程环境需外部同步。
关键接口解析
List 接口
定义了有序集合的基础行为,如 add(E e)、remove(int index)、get(int index) 等。由于底层是链表,索引访问必须从头或尾遍历,这是与 ArrayList 的核心区别。
Deque 接口
双端队列接口,允许在首尾进行插入、删除和获取。
- 队列行为:先进先出(FIFO),如
offer()、poll()。 - 栈行为:后进先出(LIFO),如
push()、pop()。 - 优势:双向链表天然支持首尾 O(1) 操作,是 Deque 接口的优秀实现。
其他标记接口
- Cloneable:支持浅拷贝,
clone()会创建新实例,元素引用共享。 - Serializable:支持序列化,便于网络传输或持久化。
- Iterable:提供迭代器遍历能力,支持增强 for 循环。
二、链表数据结构基础
链表由一系列节点组成,每个节点包含两部分:
- 数据域:存储实际数据。
- 指针域:指向下一个(或上一个)节点的引用。
常见的链表类型包括单向链表、双向链表,以及是否包含头节点的区别。手动实现时,通常从无头结点的单向链表入手,理解后再扩展至其他类型。

三、手动实现单向链表
为了深入理解机制,我们尝试手动实现一个基础的单向链表。代码分为节点定义、基本变量、核心方法三部分。



