HashMap原理

https://blog.csdn.net/weixin_42759988/article/details/99665964

put方法的思路:

1.对 key 的 hashCode()做 hash,然后再计算 index;

2.如果没碰撞直接放到 bucket 里;

3.如果碰撞了,以链表的形式存在bucket next

4.如果碰撞导致链表过长(大于等于 TREEIFY_THRESHOLD 默认是8),就把链表转换成红黑树;

5.如果节点已经存在就替换 old value(保证 key 的唯一性)

6.如果 bucket 满了(超过 load factor(0.75)) * current capacity),就要 resize,变为当前大小的2倍

HashMap 初始大小计算:
一般我们都会调用无参的构造函数来初始话一个数组对象,所以默认的capacity是16,不用我们计算。

有参的构造方法,new HashMap(initail capacity: 10)这里我们给个初始容量10

但是初始话出来的table size是16,原理就是hashmap底层会用大于等于这个初始 capacity的2 幂次方,所以这里大于10的2的幂次方数是16,如果是17则是32.

posted @ 2021-07-16 01:05  DiligentCoder  阅读(62)  评论(0编辑  收藏  举报