JAVA - LinkedList 与 ArrayList 区别和 LinkedList 的四大接口解析

news/2025/10/10 21:52:26/文章来源:https://www.cnblogs.com/ajunjava/p/19133950

什么是 LinkedList

  • LinkedList 就像一个火车车厢队列。每个“车厢”里装着一个数据(元素),而且每个车厢都知道:自己前面是哪节车厢previous,自己后面是哪节车厢next,所以它是一种 “链式结构”
  • 不像 ArrayList 是一整块“连续的座位”(数组)LinkedList 是一个一个用链子连接的“车厢”

LinkedList 的特点

  • 有序的:按照你加入的顺序排好 >>> 比如你依次加入 A、B、C,顺序就是 A→B→C
  • 可前后插入删除:在头尾都能插数据 >>> 比如 addFirst()addLast()
  • 插入删除快:不用挪动所有元素,只改“链子”连接 >>> 删除 B,只要让 A→C 重新连上
  • 查找慢:不能随机访问,要从头一个个找 >>> 要找第 10 个元素得从第 1 个开始走
  • 支持克隆和序列化:可以复制保存网络传输 >>> 比如保存到文件发送到别的机器

LinkedList 实现的接口

  • List:是一个“有顺序的列表” >>> 像排好队的学生
  • Deque双端队列,可以从头尾操作 >>> 像一列火车头尾都能挂车厢
  • Cloneable:能被克隆(复制)>>> 像拍照复制整列火车
  • Serializable:能被序列化(写入文件或网络)>>> 像把火车打包存档恢复

和 ArrayList 的区别(重点)

  • 底层结构:ArrayList 是数组,而 LinkedList 是链表
  • 查找速度:ArrayList 更快(O(1)),而 LinkedList 比较慢(O(n))
  • 插入删除:ArrayList 比较慢(要挪动元素),而 LinkedList 更快(改链接)
  • 是否支持双端操作:ArrayList 不支持,LinkedList 支持
  • 适合场景:ArrayList 查得多改得少,LinkedList 改得多查得少

LinkedList 简单例子

LinkedList<String> list = new LinkedList<>();list.add("A");
list.add("B");
list.addFirst("Start"); //从头加
list.addLast("End"); //从尾加System.out.println(list);
// 输出:[Start, A, B, End]

LinkedList 总结

  • LinkedList 是一个能从两头插入或删除的“链式队列”,查找不快,但插入删除灵活,实现了 ListDequeCloneableSerializable 四个接口。

LinkedList 的四大接口解析

List 接口

  • 有顺序的列表,你可以按位置访问元素。例如排队买奶茶,每个人都有自己的编号(位置),你可以直接喊:“请第 3 个人出来!”
  • 关键点
    • 保留顺序
    • 可以按索引访问、添加、删除
    • 典型方法get(index), add(index, element), remove(index)

Deque 接口

  • 双端队列(Double-Ended Queue),可以从两端操作。例如火车车厢既可以从火车头挂车厢,也可以从火车尾挂车厢。
  • 关键点
    • 可以在头尾添加或删除元素
    • 常用方法addFirst(), addLast(), removeFirst(), removeLast(), peekFirst(), peekLast()

Cloneable 接口

  • 可克隆,能复制自己
  • 关键点
    • 可以做一个一模一样的 LinkedList 副本
    • 关键方法clone()(浅拷贝,只复制元素引用,不复制元素本身)

Serializable 接口

  • 可序列化,能被“存档”或“传输”。比如把火车拆成零件打包寄给朋友,朋友再把它组装起来还是原来的火车。
  • 关键点
    • 存入文件、数据库,或通过网络发送
    • 实现 Serializable 的对象可以用 ObjectOutputStream 写入文件,用 ObjectInputStream 读取回来

四大接口总结

  • List排队买奶茶 >>> 有顺序,按位置操作元素
  • Deque火车两端加车厢 >>> 双端插入/删除元素
  • Cloneable镜子里的复制品 >>> 可以克隆(浅拷贝)
  • Serializable拆火车打包寄 >>> 可以序列化保存或传输

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苍穹外卖第三天(Swagger、@RequestParam和@RequestBody的使用场景、@PostMapping和@RequestMapping的区别、对象属性拷贝、@Insert注解)

一、Swagger Swagger是一个用于生成、描述、文档化可视化API的工具(框架)。直接使用Swagger会比较繁琐,所以我们用到了Knife4j框架,它对Swagger进行了封装,简化了相应的操作。 1、Knife4j的使用方式: (1)导入K…

Git 多账号管理

# 新建空白文件夹 mkdir <YOUR PROJECT> # 初始化仓库 git init # 配置当前仓库账号 git config user.name "<YOUR NAME>" git config user.email "<YOUR EMAIL>" # 给当前账号…

完整教程:一文读懂费用分析:定义、分类与成本费用区别

完整教程:一文读懂费用分析:定义、分类与成本费用区别2025-10-10 21:48 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; …

Hyper Server 2019安装I226-V网卡驱动

背景:Hyper-V Server 2019 安装完提示找不到活动的网络适配器 网卡型号:Intel I226-V 以下内容以Hyper-V Server 2019和Intel I226-V网卡为例,其他系统版本(NT6以上)和同系列网卡,操作大同小异,可参考进行。 由…

P10201 永恒

rt好题。 对于一次询问 \((x_1,y_1)\) 到 \((x_2,y_2)\),显然若两点不在同一个联通块中则无解。考虑在同一个联通块中的答案。 我们对整张图进行黑白染色。则有结论:若黑色/白色格点存在不同的数,则一定有解。 证明…

CF1209H tj

zd 讲的啥玩意啊。 题意 你初始的能量为 \(0\),每秒会回复一点能量,同时你每秒可以花 \(x\in [0,2]\) 点能量行走 \(x\) 的距离。 同时地上会有 \(n\) 个传送带,传送带的基础速度为 \(s_i\),求从 \(0\) 走到 \(L\)…

AirBattery - 在Mac上实时监控所有苹果设备电量

AirBattery是一款专为Mac设计的电池监控工具,能够实时显示iPhone、iPad、Apple Watch等苹果设备的电量信息,支持Dock栏、状态栏和小组件显示,让您随时掌握所有设备的电池状态。项目简介 AirBattery 是一款功能强大的…

HTML学习日记

2025.10.10 打卡HTML中尽量不要省略结束标签,而且空元素最好写<br />而不是<br>,这样子做是保证每一个元素都被关闭(空元素在开始标签中关闭)。 使用小写标签,尽管大写也能解析,但是小写标签更被推荐…

10.10每日总结

今天主要的课程有人机交互和机器学习,还有大数据的作业题差一道没完成(用hbase建表),后天就是外语能力大赛的初赛了,加油!

二分图与网络流 Trick

dag 最大独立集(也叫最长反链)Dilworth 定理:一个 dag 中最大独立集的大小,等于其偏序集的最小不可重链覆盖的大小。听着很神秘,实际是这样: 偏序集:对于每一个点三元组 \((i, k, j)\),如果原图中有边 \((i, k…

10月10号

今天进行了日语的学习。 以及对数据结构和离散数学的复习。

win11 系统如何进行硬盘分区?固态硬盘怎么分区?SSD 固态硬盘分区教程

win11本身就有自带的分区功能,所以不用借肋第三方软件也能分区,下面开始分享分区方法。 win11其实和win10差不多,功能也差不多,如果分区过win10可能都不用学就会。 理解原理 将硬盘分区,就是把原有硬盘类式于一个…

10/10

今天上午就一节课,明天放假,雨什么时候停呀

数论(未完)

前言: 复习一下数论(部分) 裴蜀定理 结论: \(∀a,b∈Ζ\),设\(d=gcd(a,b)\) ,则\(∃x,y\)使得\(ax+by=d\) 推论:\(ax+by=m\)有解,当且仅当\(d|m\) 若\(gcd(a,b)=1\),则存在\(x,y\)使得\(ax+by=1\) 对于\(n\)个…

没做完的题

放在这里待办 定义 \[g(n)=2\sum ^n_{i=2}\left \lfloor \frac{n}{i} \right \rfloor^2 \phi(i)+n^2 \]求 \(g(n)\) 定义 \[f(n)=\frac{g(n)-n^2}{2} \]则 \[f(n)=\sum ^n_{i=2}\left \lfloor \frac{n}{i} \right…

JavaScriptDay1

1.什么是JavaScript 1.1 概述 JavaScript是一门世界上最流行的脚本语言 Java、JavaScript 一个合格的后端人员,必须要精通JavaScript 2.快速入门 2.1、引入javaScript内部标签 <script>//... </script> 外…

淘宝NPM镜像地址https://registry.npm.taobao.org不可用

1 地址已经更新了,https://registry.npm.taobao.org已经停服2 新地址是 https://registry.npmmirror.com

星星充电一面

1、你是否了解ThreadLocal吗 2、如果有父线程和子线程,那么子线程是否能访问到父线程ThreadLocal里面的内容吗 3、那你的项目中只是一个单体项目吗,没有子线程?那如果我想要子线程访问父线程里面的内容怎么办 4、布…

6 CF1034 div3 题解

CF1034 div3 打了一下虚拟赛,感觉自己写代码不够认真,前面三个题都是能秒的,结果还寄了几发 这波直接写不会的题的题解吧,节省时间 F 题面 给定一个 \(n\) ,对于一个长度为 \(n\) 的排列,称满足下面条件的排列为…

5 ABC413 题解

ABC 413 题解 D 题面 给定一个长度为 \(N\) 的整数序列 \(A=(A_1,A_2,\ldots,A_N)\) 。 保证对于任何 \(i\ (1\le i\le N)\) , \(A_i\) 不为 \(0\) 。 判断是否存在 \(A\) 的一个排列 \(B=(B_1,B_2,\ldots,B_N)\) 使得…