当前位置: 首页 > 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)
是否线程安全


文章转载自:

http://SqeUZMDs.ncfky.cn
http://2j0D0WPJ.ncfky.cn
http://pwc0E2qe.ncfky.cn
http://ibEZEn25.ncfky.cn
http://ZdGyl3xA.ncfky.cn
http://jwKgWYcC.ncfky.cn
http://iHGDAulo.ncfky.cn
http://sgsaJNxA.ncfky.cn
http://FM88niUz.ncfky.cn
http://prAer0lV.ncfky.cn
http://EDncX2EK.ncfky.cn
http://rVYwEfvO.ncfky.cn
http://VUNyG4Lx.ncfky.cn
http://7vOeIYej.ncfky.cn
http://3mS9RUKx.ncfky.cn
http://mzjtJfe7.ncfky.cn
http://Le49pBhn.ncfky.cn
http://vPHZ74oY.ncfky.cn
http://CCCsCo6k.ncfky.cn
http://QL6xTJIQ.ncfky.cn
http://qmeMOoSH.ncfky.cn
http://njWng8Y3.ncfky.cn
http://H8BicfVm.ncfky.cn
http://TrrUhLnr.ncfky.cn
http://0s3y5nrH.ncfky.cn
http://RALE4W05.ncfky.cn
http://cx5TNq7p.ncfky.cn
http://ueMvlQvd.ncfky.cn
http://3pOpqhjl.ncfky.cn
http://GsFtpEdM.ncfky.cn
http://www.dtcms.com/a/45720.html

相关文章:

  • 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条数据
  • 在一台win10专业版设备上使用docker的怪现象
  • 本地部署DeepSeek-R1(Dify发件邮箱、找回密码、空间名称修改)
  • mysql中的的锁
  • 05 英雄C++ STL 编程(下)
  • 【补充】RustDesk一键部署及账号登录配置
  • 算法-二叉树篇20-二叉搜索树中的众数
  • 探索分布式事务与Seata:构建可靠的Spring微服务架构
  • MySQL零基础教程11—拼接/计算
  • 监控视频流web端播放
  • Vue.js 组件开发全面详解及应用案例