ArrayList 和 LinkedList区别


一、底层实现

特性 ArrayList LinkedList
数据结构 动态数组(Object[] 数组) 双向链表(每个节点有前驱和后继)
内存布局 连续内存,空间利用率高 非连续内存,空间占用大
元素访问方式 下标随机访问(基于索引) 只能顺序遍历,找元素慢

⏱ 二、时间复杂度对比(核心!)

操作 ArrayList LinkedList
随机访问 O(1) O(n)
头部插入 O(n)(全体后移) O(1)
中间插入 O(n) O(n)
尾部插入 平均 O(1)(扩容O(n)) O(1)
删除 O(n)(后移) O(n)(找到后 O(1))

三、扩容机制(只有 ArrayList 有)

  • 初始容量默认 10
  • 扩容规则:新容量 = 老容量 * 1.5
  • 扩容涉及 新数组 + 数据拷贝(O(n)),性能有抖动风险

四、适用场景总结

场景 推荐
随机访问多,读多写少 ✅ ArrayList(查询快)
大量插入删除,尤其是头尾操作 ✅ LinkedList(链表优势)
空间敏感(节省内存) ✅ ArrayList
需要顺序遍历 都可以,但 ArrayList 更快

五、面试总结口诀

"查快用 ArrayList,增删快用 LinkedList"
"空间紧张选 ArrayList,频繁改动选 LinkedList"

你可能感兴趣的:(java,多线程,系统)