hashmap扩容:
默认大小: 16, 增长因子:0.75
扩容点规则(什么时候扩容): 16*0.75=12
存储方式:数组+链表
扩容方法:扩容为原来的2倍
出现于:JDK1.2
扩容条件:
1、判断当前个数是否大于等于阈值
2、当前存放是否发生哈希碰撞
hashtable扩容:
默认大小: 11, 增长因子:0.75
扩容点规则(什么时候扩容): 11*0.75=12, (int)Math.min(newCapacity * loadFactor, MAX_ARRAY_SIZE + 1); MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
存储方式:数组+链表
扩容方法:扩容为原来的2倍+1
出现于:JDK1.0
ConcurrentHashMap 扩容:
默认大小: segment位16个,桶的数量是16,桶内hash表的数量是1,加载因子是0。75。
扩容点规则(什么时候扩容):
当往hashMap中成功插入一个key/value节点时,有可能触发扩容动作:
1、如果新增节点之后,所在链表的元素个数达到了阈值 8,则会调用treeifyBin方法把链表转换成红黑树,不过在结构转换之前,会对数组长度进行判断,实现如下:
如果数组长度n小于阈值MIN_TREEIFY_CAPACITY,默认是64,则会调用tryPresize方法把数组长度扩大到原来的两倍,并触发transfer方法,重新调整节点的位置。
2、新增节点之后,会调用addCount方法记录元素个数,并检查是否需要进行扩容,当数组元素个数达到阈值时,会触发transfer方法,重新调整节点的位置。
存储方式:segment+数组+链表
扩容方法:
出现于:JDK1.5