LinkedList基于双向链表实现,支持高效插入删除。1. 可用addFirst/addLast/add在任意位置添加元素;2. 通过removeFirst/removeLast/remove按位置或对象删除;3. 提供getFirst/getLast/get/set进行访问修改;4. 支持for-each、Iterator正反向遍历。因其Deque特性,适合两端操作,但随机访问性能差,大量索引访问应选ArrayList。

Java中的LinkedList类本身就基于双向链表实现,可以直接用来执行各种链表操作。它不仅实现了List接口,还实现了Deque接口,因此既可以当作列表使用,也能作为队列或双端队列操作。下面详细介绍如何利用LinkedList完成常见的双向链表操作。
添加元素
LinkedList提供了多种方式在链表的任意位置插入节点,适用于模拟双向链表的插入行为。
- add():默认在链表末尾添加元素
- addFirst():在链表头部插入元素
- addLast():在链表尾部插入元素(与add相同)
- add(index, element):在指定索引位置插入元素
LinkedListlist = new LinkedList<>(); list.add("A"); list.addFirst("B"); // 链表变为 [B, A] list.addLast("C"); // 链表变为 [B, A, C] list.add(1, "D"); // 在索引1处插入D → [B, D, A, C]
删除元素
可以从链表的任意位置移除节点,自动更新前后指针。
- remove():删除第一个元素
- removeFirst():删除头节点
- removeLast():删除尾节点
- remove(index):删除指定索引处的元素
- remove(object):删除首次出现的指定对象
list.removeFirst(); // 删除B → [D, A, C]
list.remove(2); // 删除索引2的元素C → [D, A]
list.remove("A"); // 删除A → [D]
访问与修改元素
虽然链表不适合频繁随机访问,但仍然可以通过索引获取或更新值。
立即学习“Java免费学习笔记(深入)”;
- get(index):获取指定位置的元素
- getFirst():获取头元素
- getLast():获取尾元素
- set(index, element):替换指定位置的元素
String first = list.getFirst(); // 获取D String last = list.getLast(); // 也是D(只有一个) list.set(0, "E"); // 替换为E → [E]
遍历链表
支持多种遍历方式,推荐使用增强for循环或迭代器。
- 使用
for-each循环 - 使用
Iterator正向或反向遍历 - 通过索引配合
get()(性能较低,不推荐大量数据时使用)
// 增强for循环
for (String s : list) {
System.out.print(s + " ");
}
// 使用迭代器
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
// 反向遍历
Iterator rit = list.descendingIterator();
while (rit.hasNext()) {
System.out.print(rit.next() + " ");
}
基本上就这些常用操作。由于LinkedList内部已经是双向链表结构,无需手动管理前驱和后继指针,Java已经封装好了所有底层逻辑。合理使用其API就能高效完成插入、删除、查找等任务。注意:若需要频繁按索引访问,建议使用ArrayList;若频繁在两端增删,LinkedList更合适。










