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

Java集合对比

ArrayListLinkedListVectorStackHashMapLinkedHashMapHashTableTreeMap
实现接口
List
List Deque
List
List
Map
Map
Map
NavigableMap
父类
AbstractList
AbstractList
AbstractList
Vector
AbstractMap
HashMap
Dictionary
AbstractMap
底层数据结构动态数组双向链表动态数组动态数组动态数组+链表+红黑树动态数组+链表+红黑树+双向链表动态数组+链表红黑树
元素是否可重复可重复可重复可重复可重复

key不能重复

value可重复

key不能重复

value可重复

key不能重复

value可重复

key不能重复

value可重复

是否允许存null允许允许允许允许key value都可以key value都可以

key不能为null

value不能为null

key不能为null

value可以为null

是否有序有序(插入顺序)有序(插入顺序)有序(插入顺序)有序(插入顺序)无序

有序(按照插入顺序或者访问顺序)

访问顺序:访问某个元素,就将元素移到双向链表尾端

无序有序(key的自然排序或者自定义比较器排序)
扩容机制

默认初始容量10

原数组容量的1.5倍

不需要预先分配空间

默认初始容量10

默认扩容为原来的两倍

指定增长容量,则是原长度+增长容量

和Vector一样

默认初始容量是16

默认比例因子是0.75

扩容为原来的2倍

数组扩容和HashMap一样

默认容量是11

默认比例因子是0.75

扩容为原来的2倍+1

不需要预先分配空间

扩容时机

原数组满了没有原数组满了原数组满了

元素个数达到阈值(容量*比例因子),扩容为原来的2倍

链表长度到达8:数组长度没到64,扩容数组

数组长度大于64,转红黑树

红黑树个数<6,转成链表

和HashMap一样,扩容不影响双向链表(元素顺序)元素个数达到阈值,扩容到原来的2倍+1没有
查询

索引位查找:O(1)

指定元素查找:

O(n)

索引位查找:

头尾O(1)

其他O(n)

元素查找:

头部O(1)

其他O(n)

索引位查找:O(1)

指定元素查找:

O(n)

与Vector一样

根据key计算索引位定位:

索引位只有一个元素:O(1)

是链表O(1)+O(n)

是红黑树O(1)+O(logn)

和HashMap一样

根据key计算索引位定位:

索引位只有一个元素:O(1)

是链表O(1)+O(n)

O(logn)
添加

尾部O(1)

其他部位O(n):添加后要后移索引位之后的元素

头尾添加:O(1)

中间位置:O(n)

尾部O(1)

其他部位O(n)

与Vector一样

根据key计算索引位定位:

索引位没有值 O(1)

是链表:O(1)+O(n)

红黑树:按照其逻辑添加O(1)+O(logn)

和HashMap一样

双向链表添加:O(1)    (可以获取到节点的前后节点)

根据key计算索引位定位:

索引位没有值 O(1)

是链表O(1)+O(n)

O(logn)
删除

尾部O(1)

其他部位O(n):删除后要前移index索引位之后的元素

头尾添加:O(1)

中间位置:

1.根据元素删除:O(n)

2.根据节点删除:O(1) (节点中有前后指针,获取到对应节点修改其指针)

尾部O(1)

其他部位O(n

与Vector一样

根据key计算索引位定位:

索引位只有一个元素(不用移位):O(1)

是链表:遍历链表找到元素删除O(1)+O(n)

是红黑树:根据逻辑查找到元素删除O(1)+O(logn)

和HashMap一样

双向链表删除:O(1)    (可以获取到节点的前后节点)

根据key计算索引位定位:

索引位只有一个元素(不用移位):O(1)

是链表:遍历链表找到元素删除O(1)+O(n)

O(logn)
是否线程安全

相关文章:

  • LeetCode72编辑距离(动态规划)
  • YoloV8改进策略:Block改进|CBlock,Transformer式的卷积结构|即插即用
  • reverse学习
  • Boosting
  • 基于SpringBoot的美妆购物网站系统设计与实现现(源码+SQL脚本+LW+部署讲解等)
  • 国自然面上项目|基于多模态MR影像的胶质母细胞瘤高危区域定位及预后预测研究|基金申请·25-02-28
  • Unity中VFX烟雾特效与场景中的碎片物体重叠时闪烁问题
  • JavaWeb后端基础(3)
  • 学习第八天---链表
  • 【通俗讲解电子电路】——从零开始理解生活中的电路(一)
  • Task :prepareKotlinBuildScriptModel UP-TO-DATE,编译卡在这里不动或报错
  • Skynet入门(一)
  • JavaScript系列02-函数深入理解
  • Android SDK与NDK的区别
  • LeetCode第58题_最后一个单词的长度
  • 进行性核上性麻痹患者的生活护理指南
  • tableau之标靶图、甘特图和瀑布图
  • CI/CD与容器化技术核心知识点的QA
  • SQL 语言基础:日期和时间处理
  • ES怎么查询大于10000条数据
  • 静态网站怎么做优化/网页制作教程视频
  • 秦皇岛市网站制作公司/市场推广和销售的区别
  • 网站建设毕业实践设计报告/重庆seo管理平台
  • 邢台信息港二手房出售/长沙正规seo优化公司
  • 可以做兼职的网站有哪些/北京seo网络推广
  • 国外设计师作品网站/网络媒体发稿