news 2026/8/11 4:56:56

java学习--LinkedList

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java学习--LinkedList

一、LinkedList 是什么?

LinkedList 是 Java 集合框架中java.util包下的一个实现类,它实现了ListDeque等接口,底层基于双向链表实现(JDK 1.6 及之前是循环链表,之后改为双向链表)。

简单来说:

  • 链表的每个元素(节点)包含「前驱节点引用」、「数据」、「后继节点引用」
  • 没有固定大小的数组结构,元素在内存中不是连续存储的
  • 支持快速的头尾节点操作,也支持按索引访问(但效率低)

二、核心特性

  1. 增删效率高:在链表头部 / 尾部或指定节点附近增删元素时,只需修改节点引用,时间复杂度O(1)(按索引增删需先遍历找节点,复杂度O(n))。
  2. 查询效率低:按索引访问元素时,需要从链表头 / 尾开始遍历,时间复杂度O(n)(对比 ArrayList 的O(1))。
  3. 非线程安全:多线程环境下直接使用会有并发问题,需手动加锁或使用Collections.synchronizedList(new LinkedList<>())
  4. 支持双端操作:因为实现了Deque接口,可作为队列(Queue)、双端队列(Deque)、栈(Stack)使用。

三、常用操作示例

下面是 LinkedList 最常用的增删改查、队列 / 栈相关操作,代码可直接运行:

import java.util.LinkedList; import java.util.Queue; import java.util.Deque; public class LinkedListDemo { public static void main(String[] args) { // 1. 创建 LinkedList 对象 LinkedList<String> list = new LinkedList<>(); // 2. 新增元素 list.add("Java"); // 尾部添加 list.addFirst("Python"); // 头部添加 list.addLast("C++"); // 尾部添加(等同于 add) list.add(2, "Go"); // 指定索引添加(索引从0开始) System.out.println("初始链表:" + list); // [Python, Java, Go, C++] // 3. 查询元素 String first = list.getFirst(); // 获取头部元素:Python String last = list.getLast(); // 获取尾部元素:C++ String index2 = list.get(2); // 获取索引2的元素:Go System.out.println("索引2的元素:" + index2); // 4. 修改元素 list.set(1, "JavaScript"); // 修改索引1的元素 System.out.println("修改后链表:" + list); // [Python, JavaScript, Go, C++] // 5. 删除元素 list.removeFirst(); // 删除头部元素 list.removeLast(); // 删除尾部元素 list.remove(0); // 删除索引0的元素 System.out.println("删除后链表:" + list); // [] // 6. 作为队列(FIFO)使用 Queue<String> queue = new LinkedList<>(); queue.offer("A"); // 入队 queue.offer("B"); System.out.println("队列出队:" + queue.poll()); // A(出队并删除) System.out.println("队列首元素:" + queue.peek()); // B(仅查看) // 7. 作为栈(LIFO)使用(推荐用Deque而非Stack) Deque<String> stack = new LinkedList<>(); stack.push("X"); // 入栈 stack.push("Y"); System.out.println("栈出栈:" + stack.pop()); // Y(出栈并删除) System.out.println("栈顶元素:" + stack.peek()); // X(仅查看) } }

四、LinkedList vs ArrayList(核心区别)

特性LinkedListArrayList
底层结构双向链表动态数组
随机访问(get/set)慢(O (n))快(O (1))
增删操作(非头尾)慢(需遍历找节点,O (n))慢(需移动元素,O (n))
增删操作(头尾)快(O (1))慢(可能扩容,O (n))
内存占用高(每个节点存额外引用)低(连续存储,仅预留空间)
适用场景频繁增删头尾、队列 / 栈频繁查询、少量增删

总结

  1. LinkedList 底层是双向链表,核心优势是头尾增删快,劣势是随机访问慢
  2. 它不仅是 List,还能作为 Queue/Deque 使用,适合实现队列、栈等结构。
  3. 选择 LinkedList 还是 ArrayList,核心看操作场景:频繁查用 ArrayList,频繁头尾增删用 LinkedList。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/9 22:36:37

渗透测试——Funbox2靶机渗透提权详细过程(FTP匿名登陆与SSH爆破)

今天继续给大家带来vulnhub系列的Funbox2靶机详细的渗透横提权过程&#xff1b; 本次渗透过程&#xff0c;也是学到了新知识&#xff1a; FTP匿名登陆下载文件使用SSH爆破工具登陆用户SUDO提权 文章目录前置准备信息收集访问http页面漏洞一&#xff1a;FTP(匿名登录功能)漏洞二…

作者头像 李华
网站建设 2026/7/25 21:13:06

python基于flask框架的在线音乐推荐排行榜网站

目录基于Flask框架的在线音乐推荐排行榜网站摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于Flask框架的在线音乐推荐排行榜网站摘要 该网站采用Python的Flask框架开发&#xff0c;…

作者头像 李华
网站建设 2026/7/26 18:49:05

别再纠结哪个AI做PPT靠谱!“轻竹办公AIPPT”一站式解

别再纠结哪个AI做PPT靠谱&#xff01;“轻竹办公AIPPT”一站式解决在职场和校园生活中&#xff0c;制作PPT是一项常见却又让人头疼的任务。很多人都有过这样的经历&#xff1a;内容已经准备好&#xff0c;却不知道如何快速整理成一份结构清晰、重点突出的PPT。从空白页开始搭建…

作者头像 李华
网站建设 2026/8/10 2:43:23

事务中的隔离性是如何保证的呢?(你解释一下MVCC)

事务的隔离性通过锁和多版本并发控制&#xff08;MVCC&#xff09;来保证。MVCC通过维护数据的多个版本来避免读写冲突。底层实现包括隐藏字段、undo log和read view。隐藏字段包括trx_id和roll_pointer。undo log记录了不同版本的数据&#xff0c;通过roll_pointer形成版本链。…

作者头像 李华
网站建设 2026/8/5 12:09:08

既然强转会报错,java为啥不封装处理好,避免强转报错?

✅ 用【大白话 人话】彻底讲懂&#xff0c;不讲原理、只讲结论、保证听懂&#xff0c;0 基础也能明白&#xff01;你不懂太正常了&#xff0c;这个问题本身就是 Java 的反直觉坑&#xff0c;咱们抛开所有专业术语&#xff0c;只说人话、只讲你关心的「为什么」和「怎么办」&am…

作者头像 李华