首页
编程随笔
Java笔记
Html/Css/Js
Android
后端笔记
服务器搭建
BUG收集
Java异常
Android异常
在线工具
Json格式化
编码/解码
Epub在线编辑
登录
发布文章
个人文章
退出登录
首页
技术教程
BUG收集
在线工具
资源下载
登录
发布文章
退出登录
搜索
当前位置:
首页
-
博客
- 正文
关闭
为什么 HashMap 要用 h^(h >>>16) 计算hash值?槽位数必须是 2^n?
更新时间:2022-06-18 12:18:56
阅读数:884
发布者:落幕
以下是Java8中HashMap计算key对应hash的源码: ```java static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); } ``` 主要是为了只为增大随机性,减少hash的碰撞几率;让值保存的位置更加分散,散列性更好,提高读写性能。 以String类型"test"为例,看看区别: ### (1)为什么需要左移16位 通过如下代码打印一下"test"的hashcode中32位的二进制 ```java public static void print(int a){ //输出32位二进制表示 System.out.print(a+"的二进制表示:"); for(int i=31;i>-1;i--) System.out.print((a&(1<