ArrayList、Vector、HashMap、HashTable、HashSet的默认初始容量、加载因子、扩容增量

本文介绍了Java集合框架中ArrayList、Vector、HashMap、HashSet的默认初始容量、加载因子及扩容增量。ArrayList和Vector都基于数组,但Vector线程安全但性能较低;ArrayList扩容增量为原来容量的50%。HashSet的内部实现基于HashMap,其默认初始容量为16,加载因子为0.75,扩容时容量翻倍。HashMap的默认容量同样是16,加载因子同样为0.75,扩容时同样翻倍。HashTable作为已废弃的线程安全选项,初始容量为11,扩容增量为2倍原长度加1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中集合容量是有初始值的,如果容量不够用就会进行扩容,并将容器原来的数据全部复制到新的内存上。
设置合理的初始容量,可以提高效率。

加载因子(factor):小于等于1,当元素个数超过(容量长度*加载因子)时,进行扩容。


List 元素是有序的、可重复,ArrayList、Vector默认初始容量为10。

  • Vector:线程安全,性能差,底层数据结构是数组
  1. 加载因子为1:即当元素个数超过容量长度时,才扩容
  2. 扩容增量:增大为原容量的2倍。如Vector的容量为10,一次扩容后是容量为20
  • ArrayList:线程不安全,查询速度快,底层数据结构是数组结构,与Vector的区别是扩容增量时增加50%的容量。如 ArrayList的容量为10,一次扩容后是容量为16
Set的子类大部分是无序的、不可重复(TreeSet是有序的)。
  • HashSet:线程不安全,存取速度快,内部实现是HashMap的key entry
  1. 默认初始容量为16(为何是16,见下方对HashMap的描述)
  2. 加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容
  3. 扩容增量:增加1倍,HashSet的容量为16,一次扩容后是容量为32
Map
  • HashMap:默认初始容量为16,长度始终保持2的n次方(16是2^4,可以提高查询效率,另外,32=16<<1,扩容只需左移,速度很快)
  1. 加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容
  2. 扩容增量:增加1倍,如HashMap的容量为16,一次扩容后是容量为32
  • HashTable:从Java1.2开始就被废弃,现在也就面试有点用。默认初始容量为11,线程安全,但是速度慢,不允许key/value为null
  1. 加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容
  2. 扩容增量:2*原数组长度+1,如 HashTable的容量为11,一次扩容后是容量为23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值