ArrayList和LinkedList的区别

  1. 底层数据结构
  • ArrayList 是动态数组的数据结构实现。

  • LinkedList 是双向链表的数据结构实现。

  1. 操作数据效率
  • ArrayList按照下标查询的时间复杂度O(1)【内存是连续的,根据寻址公式】, LinkedList不支持下标查询。

  • 查找(未知索引): ArrayList需要遍历,链表也需要链表,时间复杂度都是O(n)。

  • 新增和删除

    • ArrayList尾部插入和删除,时间复杂度是O(1);其他部分增删需要挪动数组,时间复杂度是O(n)。

    • LinkedList头尾节点增删时间复杂度是O(1),其他都需要遍历链表,时间复杂度是O(n)。

  1. 内存空间占用
  • ArrayList底层是数组,内存连续,节省内存。

  • LinkedList 是双向链表需要存储数据,和两个指针,更占用内存。

  1. 线程安全
  • ArrayList和LinkedList都不是线程安全的。

  • 如果需要保证线程安全,有两种方案:

    • 在方法内使用,局部变量则是线程安全的。

    • 使用线程安全的ArrayList和LinkedList。

相关推荐
柒.梧.14 小时前
SSM常见核心面试问题深度解析
java·spring·面试·职场和发展·mybatis
杨章隐14 小时前
Java 解析 CDR 文件并计算图形面积的完整方案(支持 MultipartFile / 网络文件)@杨宁山
java·开发语言
千金裘换酒14 小时前
LeetCode 删除链表的倒数第N个结点
算法·leetcode
Renhao-Wan14 小时前
Java 并发基石:AQS (AbstractQueuedSynchronizer)
java·开发语言
SweetCode14 小时前
【无标题】
开发语言·c++·算法
shughui14 小时前
Python基础面试题:语言定位+数据类型+核心操作+算法实战(含代码实例)
开发语言·python·算法
王老师青少年编程14 小时前
信奥赛C++提高组csp-s之拓扑排序详解
c++·算法·拓扑排序·csp·信奥赛·csp-s·提高组
zlp199215 小时前
xxl-job java.sql.SQLException: interrupt问题排查(二)
java·开发语言
sunnyday042615 小时前
深入理解Java日志框架:Logback与Log4j2配置对比分析
java·log4j·logback
浩瀚地学15 小时前
【Java】异常
java·开发语言·经验分享·笔记·学习