小生常谈
作者:互联网
java中ArrayList, LinkedList, HashMap的扩容
突然发现, 北京奥运会已经过去10年了…
很久没有复习java
方面的知识, 整理一下集合扩容的几个知识点:
- ArrayList
ArrayList
初始化大小是10
(如果你知道你的ArrayList
会达到多少容量,可以在初始化的时候就指定,能节省扩容的性能开支)
扩容点规则是,新增的时候发现容量不够用了,就去扩容
扩容大小规则是,扩容后的大小=原始大小+原始大小/2 + 1
。(例如:原始大小是10
,扩容后的大小就是10+5+1 = 16
)
源码如下:
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity) newCapacity = minCapacity;
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
- LinkedList
LinkedList
是一个双向链表,没有初始化大小,也没有扩容的机制,就是一直在前面或者后面新增就好。
- HashMap
HashMap
初始化大小是16
,扩容因子(loadFactor
)默认0.75
(可以指定初始化大小,和扩容因子)
扩容规则: 当前大小和当前容量的比例超过了扩容因子,就会扩容,扩容大小*2。例如:初始大小为16
,扩容因子
标签:扩容,初始化,常谈,10,elementData,小生,minCapacity,大小 来源: https://www.cnblogs.com/liuzhongrong/p/12248997.html