☰
LinkedList知识
2026/11/3 19:24:57 网站建设 项目流程

一、LinkedList 介绍

LinkedList是List 接口的实现类,同时实现了Deque(双端队列)接口 ✅ List 共性:有序、可重复、带索引底层:双向链表,每个 Node 节点:prev前驱指针 + item数据 + next后继指针

✅ 核心特点

  1. 首尾增删速度快:只修改指针,不需要移动元素
  2. 查询慢:没有数组随机访问,按索引查找需要遍历链表
  3. 线程不安全,支持存储 null
  4. 兼具 List、队列、栈的功能,所以有两套首尾 API(一组抛异常,一组返回 null)

对比 ArrayList:

  • ArrayList:可变数组 → 查询快,中间增删慢
  • LinkedList:双向链表 → 首尾增删快,查询慢

二、LinkedList 特有方法(课件全部整理,分两类)

第一组:空集合调用时【抛出异常】

方法功能描述
void addFirst(E e)将元素插入集合开头
void addLast(E e)将元素添加到集合结尾
E getFirst()返回第一个元素,空集合抛异常
E getLast()返回最后一个元素,空集合抛异常
E removeFirst()删除并返回第一个元素,空集合抛异常
E removeLast()删除并返回最后一个元素,空集合抛异常

第二组:空集合调用时【返回 null,不抛异常】(Deque 队列方法)

方法功能描述
boolean offer(E e)元素添加到集合尾部
boolean offerFirst(E e)元素添加到集合开头
boolean offerLast(E e)元素添加到集合结尾
E peekFirst()获取第一个元素,集合为空返回 null
E peekLast()获取最后一个元素,集合为空返回 null
E pollFirst()删除并返回第一个元素,集合为空返回 null
E pollLast()删除并返回最后一个元素,集合为空返回 null

栈相关方法

方法功能描述
void push(E e)元素压入链表开头(栈:入栈)

配套:pop()弹出头部元素(课件没写,配套考点)

💡 重点区分口诀:

  • get /remove 开头:空了抛异常
  • peek /poll 开头:空了返回 null,安全

三、遍历方式(包含 Lambda、方法引用)

  1. 普通 for 循环(不推荐,索引遍历效率低)
  2. 增强 for 循环
  3. Iterator 迭代器
  4. forEach + Lambda
linkedList.forEach(elem -> System.out.println(elem)); linkedList.forEach(System.out::println);

四、完整代码示例

import java.util.LinkedList; public class TestLinkedList { public static void main(String[] args) { LinkedList<String> link = new LinkedList<>(); // 第一组(抛异常) link.addFirst("A"); link.addLast("B"); System.out.println(link.getFirst()); System.out.println(link.getLast()); // 第二组(返回null,安全) link.offerFirst("0"); link.offerLast("9"); link.offer("C"); System.out.println(link.peekFirst()); System.out.println(link.peekLast()); link.pollFirst(); link.pollLast(); // 栈操作 push入栈 link.push("Top"); System.out.println(link); // Lambda遍历 link.forEach(System.out::println); } }

五、适用场景

✅ 适合:频繁首尾添加、删除;用作队列、栈 ❌ 不适合:大量随机索引查询

六、List 两大实现类对比

集合底层结构查询中间增删首尾增删线程安全
ArrayList可变数组快慢慢不安全
LinkedList双向链表慢慢很快不安全

七、易错总结

  1. 多态写List<String> list = new LinkedList<>()时,只能调用 List 接口方法,调用不了 addFirst、offerFirst 等特有方法,必须用 LinkedList 接收
  2. LinkedList 有索引只是逻辑编号,底层不是数组,没有随机访问
  3. 两套首尾 API 选择:不确定集合是否为空 → 优先用 peek/poll 系列,避免异常

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询