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

3. ArrayList与LinkedList的区别


话不多说,咱们直接进入正题。

区别主要体现在四个方面:

  1. 底层数据结构
  2. 效率
  3. 空间
  4. 线程是否安全

1. 底层数据结构

  • ArrayList:基于动态数组实现

  • LinkedList:基于双向链表实现

2. 操作数据的效率

  • ArrayList按照下标查询的时间复杂度O(1)【内存是连续的,根据寻址公式】,LinkedList不支持下标查询
  • 查找(未知索引): ArrayList需要遍历,链表也需要遍历,时间复杂度都是O(n)
  • 新增和删除
    • ArrayList尾部插入和删除,时间复杂度是O(1);其他部分增删需要挪动数组,时间复杂度是O(n)
    • LinkedList头尾节点增删时间复杂度是O(1),其他都需要遍历链表,时间复杂度是O(n)

3. 内存空间占用 

  • ArrayList底层是数组,内存连续,节省内存
  • LinkedList 是双向链表需要存储数据,和两指针,更占用内存

4. 线程安全

  • ArrayList和LinkedList都不是线程安全的
  • 如果需要保证线程安全,有两种方案:
    • 在方法内使用,局部变量则是线程安全的
    • 使用线程安全的ArrayList和LinkedList(加锁),如下
List<Object>syncArrayList = Collections.synchronizedList(new ArrayList<>());
List<Object>syncLinkedList = Collections.synchronizedList(new LinkedList<>())

日子像片沉默的土壤
努力是深埋的种在蕴藏
虽一时无华
但待春归时
必绽芳华吐蕊展锋芒

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

相关文章:

  • Redis的下载安装+基础操作+redis客户端的安装
  • Java :List,LinkedList,ArrayList
  • 23种设计模式--#1工厂模式
  • CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(一)
  • AI Agent 开发
  • 【Qt】 设计模式
  • SQLite技术架构解析,适用场景有哪些?
  • 设计模式之对象池模式
  • 深入理解设计模式:组合模式(Composite Pattern)
  • kotlin的自学笔记1
  • python deptry触发镜像构建失败
  • 20250715使用荣品RD-RK3588开发板在Android13下接入USB3.0接口的红外相机
  • 前端Vue.js面试题(4)
  • OSPFv3中LSA参数
  • Web3.0 学习方案
  • 前端开发数据缓存方案详解
  • 医疗资质OCR智能审核:让合规管理更高效、更精准
  • 2025-07-15通过边缘线检测图像里的主体有没有出血
  • 【Docker基础】Dockerfile构建与运行流程完全指南:从原理到实践优化
  • Spring MVC2
  • 操作系统——进程
  • 前端-CSS-day4
  • CSS 高阶使用指南
  • Python 函数:从“是什么”到“怎么用”的完整指南
  • QT 中各种坑
  • 【Qt】QWidget核心属性
  • Django基础(二)———URL与映射
  • WSI中sdpc格式文件学习
  • 函数柯里化详解
  • 知识增强型Agent开发新范式:基于ERNIE-4.5的检索增强生成架构实践