JDK1.7:数组+链接列表jdk1.8:哈希表=阵列+链接列表+红色和黑色树哇,一个比一个背部更熟悉,并要求进行一些面试。
Hashmap提供4个构造函数:
实施表ablesizefor方法用于特定实现:
我们可以在初始化哈希姆普初始化并通过反射放置后查看更改。代码如下:
输出结果如下:
接下来,我们查看PUT方法:我没有直接使用Key的HashCode方法来生成哈希值,而是执行此操作:( H = key.hashcode()) ^(H >>> 16);
执行HashCode方法或正确的Shift 16 -bit的值后,它将获得新的哈希值,但是哈希冲突仍然不可避免。
然后查看Putval方法:
如果选项卡对应于下投标,则创建新节点将其放在数组中;
如果相应的竞标价值值得,则相同的键是相同的,并且只能根据布尔值对其进行判断;
如果节点是treenode类型,也就是说,节点数组是与竞标相对应的红色和黑色树,将插入红色和黑色树。
否则,它是链接列表的末尾,即与竞标相对应的节点数组是链接列表。
Treeifybin方法将首先确定节点阵列是否大于64,并且只有64个大于64个会变成红色和黑树,否则resize()一个长链接列表的扩展将变成两个简短的链接列表,向两个简短列表链接列表。
原始:https://juejin.cn/post/7103785290619158536