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

Java集合框架之争:ArrayList vs LinkedList

友情提示:LinkedList其实就是数据结构中的双向链表,没学过的话可以学一下有关链表的知识,至于LinkedList中的源码其实大多数据结构的基本链表操作实现的,这里我就不多做说明了,有兴趣的话可自行看源码

由于ArrayList由动态数组实现,LinkedList由双向链表实现,这里将它们的对比归类于数组与链表的区别

一、相同点
  • 数组和链表都是线性表,所谓线性,即结构像一条直线一样;

  • 这与非线性结构是不一样的,例如二叉树,它的结构是一个树状图,那必然不是线性的

二、不同点
1)在空间上
  • 数组使用连续空间存储,且数组容量往往会大于数据存储量,这就会有空间浪费

  • 链表(多个链表节点)使用非连续的空间,通过链表节点地址连接,对空间利用率很高

2)在时间上
  1. 按下标查询时

    数组查询数据时(get方法)直接根据下标访问,时间复杂度为O(1)

    链表查询数据时需要从头节点查找一直到找到目标元素,时间复杂度为O(n)

  2. 添加或删除时

    数组添加(而且添加有扩容操作)和删除时找到目标元素后需要移动目标元素后面的所有元素,也就是对后面的元素都需要操作一次,那么时间复杂度为O(n)

    链表添加和删除时链表找到目标节点后可以直接改变next和pre指向,时间复杂度为O(1)

所以在多用查询操作时选择数组效率更高,在使用添加和删除操作频繁时选择链表效率更高

如果您觉得该文章有用,欢迎点赞、留言并分享给更多人。感谢您的支持!

http://www.lryc.cn/news/257816.html

相关文章:

  • 一个用于处理嵌入式系统中的 NAND Flash 存储器的工具 `kobs-ng`
  • 【小白专用】MySQL查询数据库所有表名及表结构其注释
  • 数据库中常用的锁
  • 关于对向量检索研究的一些学习资料整理
  • 软件开发流程分析
  • 017 OpenCV 向量机SVM
  • Qt练习题
  • 文本转图像 学习笔记
  • 开源CDN软件GoEdge —— 筑梦之路
  • 基于SpringBoot+Vue会员制医疗预约服务管理信息系统(Java毕业设计)
  • 【Linux | 编程实践】防火墙 (网络无法访问)解决方案 Vim常用快捷键命令
  • 仅 CSS 阅读进度条
  • 深度剖析中国居民消费价格指数CPI数据可视化案例-Python可视化技术实现(附完整源码)【数据可视化项目案例-16】
  • SpringBoot——嵌入式 Servlet容器
  • 王炸升级!PartyRock 10分钟构建 AI 应用
  • 文件管理和操作工具Path Finder mac功能介绍
  • 转换 pytorch 格式模型为 caffe格式模型 pth2caffemodel
  • 【S32DS RTD实战】-1.3-S32K3工程生成S19,BIN,Hex文件,以及Post-build steps的妙用
  • Java工程找不到javax.xml.bind.annotation包
  • 【C语言】网络字节序和主机字节序
  • 极简模式,助力宏观数据监控
  • 智能优化算法应用:基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • IT圈的“鄙视链”大揭秘:从Java到Go,编程语言之战!
  • 【C++】算法库(复制操作、交换操作、变换操作)
  • CV计算机视觉每日开源代码Paper with code速览-2023.12.6
  • 面试经典150题(1-2)
  • MySQL使用教程
  • 微服务学习:Ribbon实现客户端负载均衡,将请求分发到多个服务提供者
  • 孩子还是有一颗网安梦——Bandit通关教程:Level0
  • 读excel文件,借助openpyxl工具