当前位置: 首页 > news >正文

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

什么是 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.hskmm.com/?act=detail&tid=28287

相关文章:

  • 苍穹外卖第三天(Swagger、@RequestParam和@RequestBody的使用场景、@PostMapping和@RequestMapping的区别、对象属性拷贝、@Insert注解)
  • Git 多账号管理
  • Hyper Server 2019安装I226-V网卡驱动
  • P10201 永恒
  • CF1209H tj
  • AirBattery - 在Mac上实时监控所有苹果设备电量
  • HTML学习日记
  • 10.10每日总结
  • 二分图与网络流 Trick
  • 10月10号
  • win11 系统如何进行硬盘分区?固态硬盘怎么分区?SSD 固态硬盘分区教程
  • 10/10
  • 数论(未完)
  • 没做完的题
  • 第十一天
  • JavaScriptDay1
  • 淘宝NPM镜像地址https://registry.npm.taobao.org不可用
  • 星星充电一面
  • 6 CF1034 div3 题解
  • 5 ABC413 题解
  • 4 CF 1032 div3 题解
  • 3 ABC411 C ~ E题解
  • 9 ABC408 D~F 题解
  • 8 ABC425 G 题解
  • 智能防御,安全赋能:AI-FOCUS 滤海AI DLP 化解外部 AI 风险
  • IDEA快捷键
  • VS code 中代码补全 自动补全函数括号
  • 优先队列
  • 学习ReAct并使用langgraph实现一个简单的ReAct AI Agent!!
  • abc 408 d~f