java Arraylist、LinkedList、Vector、HashMap、HashTable初始大小,扩容因子
ArrayList 初始容量:10 ,扩容因子:1,当容量达到上限后才会触发扩容。
扩容公式:新容量 = 旧容量/2 + 旧容量 + 1
比如:初始容量为4,其容量的每次扩充后的新容量为:4->7->11->17->26->...
即每次扩充至原有基础的1.5倍
LinkedList
linkedList没有初始化大小,它就是一个双向链表,没有扩容,就是一直在前面或者在后面新增就好
Vector 初始容量:10 ,扩容因子:1,当容量达到上限后才会触发扩容。
扩容公式:old*2 如:一次扩容为20、二次扩容为40
HashSet 初始容量:16(Hashset是基于HashMap的所以是16)
扩容因子:0.75,当容量达到最大容量的75%时就会触发扩容。
扩容公式:old*2 如:一次扩容32,二次扩容64
HashMap 初始容量:16(为何是16,16是2^4,16<<1=32,可以提高查询效率)
扩容因子:0.75,当容量达到最大容量的75%时就会触发扩容。
扩容公式:old*2 如:一次扩容32,二次扩容64
Hashtable
默认初始容量为11,线程安全,但是速度慢,不允许key/value为null。
加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍时,进行扩容。
扩容增量:2*原数组长度+1,如 HashTable的容量为11,一次扩容后是容量为23。
扩容公式:新容量 = 旧容量/2 + 旧容量 + 1
比如:初始容量为4,其容量的每次扩充后的新容量为:4->7->11->17->26->...
即每次扩充至原有基础的1.5倍
LinkedList
linkedList没有初始化大小,它就是一个双向链表,没有扩容,就是一直在前面或者在后面新增就好
Vector 初始容量:10 ,扩容因子:1,当容量达到上限后才会触发扩容。
扩容公式:old*2 如:一次扩容为20、二次扩容为40
HashSet 初始容量:16(Hashset是基于HashMap的所以是16)
扩容因子:0.75,当容量达到最大容量的75%时就会触发扩容。
扩容公式:old*2 如:一次扩容32,二次扩容64
HashMap 初始容量:16(为何是16,16是2^4,16<<1=32,可以提高查询效率)
扩容因子:0.75,当容量达到最大容量的75%时就会触发扩容。
扩容公式:old*2 如:一次扩容32,二次扩容64
Hashtable
默认初始容量为11,线程安全,但是速度慢,不允许key/value为null。
加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍时,进行扩容。
扩容增量:2*原数组长度+1,如 HashTable的容量为11,一次扩容后是容量为23。