编程语言
首页 > 编程语言> > java集合的扩容机制

java集合的扩容机制

作者:互联网

总结
ArrayList 和Vector默认加载因子都是1(元素满了才扩展容量).默认容量都是10;但是ArrayList 在jdk1.8时默认为空,当添加元素时,才初始化为10个容量。

ArrayList 默认初始容量为10,(jdk8的时候底层Object[] elementData数组初始化为{},并没有创建长度为10的数组。在add元素时才创建了10个容量。)
线程不安全,查询速度快
    底层数据结构是数组结构
    扩容增量:原容量的 0.5倍,新容量为原容量的1.5倍。
    如 ArrayList的容量为10,一次扩容后是容量为15

同样可以通过分析源码知道:
Vector:
默认初始容量为10,(jdk7和jdk8一样都初始容量为10)。
线程安全,但速度慢
    底层数据结构是数组结构
    加载因子为1:即当 元素个数 超过 容量长度 时,进行扩容
    扩容增量:原容量的 1倍,新容量为原容量的2倍。
    如 Vector的容量为10,一次扩容后是容量为20

总结:HashSet和HashMap都是默认初始容量是16,加载因子是0.75,扩容为原来的2倍。而带LinkedHashSet和LinkedHashMap是链表不存在扩容的

Set(集) 元素无序的、不可重复。
HashSet:线程不安全,存取速度快
     底层实现是一个HashMap(保存数据),实现Set接口
     默认初始容量为16(为何是16,见下方对HashMap的描述)
     加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容
     扩容增量:原容量的 1 倍,新容量为原容量的2倍
      如 HashSet的容量为16,一次扩容后是容量为32
      
Map是一个双列集合
HashMap:默认初始容量为16
     (为何是16:16是2^4,可以提高查询效率,另外,32=16<<1 –>至于详细的原因可另行分析,或分析源代码)
     加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容
     扩容增量:原容量的 1 倍,新容量为原容量的2倍
      如 HashSet的容量为16,一次扩容后是容量为32

标签:扩容,10,java,容量,16,默认,0.75,集合
来源: https://blog.csdn.net/weixin_38568503/article/details/114215833