lq920320/blogs

2019/02/19--ArrayList的默认容量是多少?

lq920320 opened this issue · 0 comments

看到了一道比较有意思的面试题,之前并没有深入研究过,在这儿记录一下。

在 Java 中,ArrayList 的默认容量是10,而且每当其元素个数超过容量长度的时候,会自动进行扩容,扩容的大小为 原容量*0.5 + 1,比如原容量是10,一次扩容之后为16;同样的,Vector 的默认容量也是10,但其扩容大小是 原容量的一倍,即原容量是10,一次扩容之后为20;ArrayList以及Vector的加载因子都是1。

接着,HashMap的默认容量是多少呢?

HashMap 的默认容量大小为16,当然这个也可以在初始化Map的时候手动设置,但必须是2的幂,比如:

Map map = new HashMap(4); 

另外,HashMap的加载因子为0.75,即元素个数超过容量长度的0.75倍之后,便会进行扩容,扩容大小为原容量的一倍,比如HashMap的容量为16,一次扩容后是容量为32。

此外还有HashSet,线程不安全,存取速度快,底层实现是一个HashMap(保存数据),实现Set接口,默认初始容量为16,加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容扩容增量:原容量的 1 倍,比如 HashSet的容量为16,一次扩容后是容量为32。

参考链接: