其他分享
首页 > 其他分享> > 小生常谈

小生常谈

作者:互联网

java中ArrayList, LinkedList, HashMap的扩容

突然发现, 北京奥运会已经过去10年了…

很久没有复习java方面的知识, 整理一下集合扩容的几个知识点:

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 是一个双向链表,没有初始化大小,也没有扩容的机制,就是一直在前面或者后面新增就好。

HashMap初始化大小是16,扩容因子(loadFactor)默认0.75(可以指定初始化大小,和扩容因子) 扩容规则: 当前大小和当前容量的比例超过了扩容因子,就会扩容,扩容大小*2。例如:初始大小为16,扩容因子大专栏

标签:扩容,初始化,常谈,10,elementData,小生,minCapacity,大小
来源: https://www.cnblogs.com/liuzhongrong/p/12248997.html