随笔 - 195  文章 - 3  评论 - 36  阅读 - 63万

源码小结:Java 集合ArrayList,LinkedList 源码

现在这篇主要讲List集合的三个子类:

  • ArrayList 底层数据结构是数组。线程不安全
  • LinkedList 底层数据结构是链表。线程不安全
  • Vector 底层数据结构是数组。线程安全

ArrayList:

  • 底层实现是数组
  • ArrayList的默认初始化容量是10,每次扩容时候增加原先容量的一半,也就是变为原来的1.5倍
  • 在增删时候,需要数组的拷贝复制(navite 方法由C/C++实现)

LinkedList:

底层实现是双向链表[双向链表方便实现往前遍历]

Vector:

  • 底层是数组,现在已少用,被ArrayList替代,原因有两个:
  1. Vector所有方法都是同步,有性能损失。
  2. 以100%比率增长,相比于ArrayList更多消耗内存。

 

总的来说:查询多用ArrayList,增删多用LinkedList。

ArrayList增删慢不是绝对的(在数量大的情况下,已测试):

如果增加元素一直是使用add()(增加到末尾)的话,那是ArrayList要快

一直删除末尾的元素也是ArrayList要快【不用复制移动位置】

至于如果删除的是中间的位置的话,还是ArrayList要快! 但一般来说:增删多还是用LinkedList,因为上面的情况是极端的~

posted on   一只阿木木  阅读(161)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示