当前位置: 首页 > 网络应用技术

JDK8-HASHMAP基础源代码分析(1)

时间:2023-03-07 23:00:20 网络应用技术

  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