美文网首页
HashMap原理 之 hash为什么要右移16位异或?

HashMap原理 之 hash为什么要右移16位异或?

作者: 技术灭霸 | 来源:发表于2020-11-08 18:36 被阅读0次

为什么要右移16位?

其实是为了减少碰撞,进一步降低hash冲突的几率。int类型的数值是4个字节的,右移16位异或可以同时保留高16位于低16位的特征

为什么要异或运算?

首先将高16位无符号右移16位与低十六位做异或运算。如果不这样做,而是直接做&运算那么高十六位所代表的部分特征就可能被丢失 将高十六位无符号右移之后与低十六位做异或运算使得高十六位的特征与低十六位的特征进行了混合得到的新的数值中就高位与低位的信息都被保留了,而在这里采用异或运算而不采用& ,| 运算的原因是 异或运算能更好的保留各部分的特征,如果采用&运算计算出来的值会向1靠拢,采用|运算计算出来的值会向0靠拢

相关文章

  • HashMap原理 之 hash为什么要右移16位异或?

    为什么要右移16位? 其实是为了减少碰撞,进一步降低hash冲突的几率。int类型的数值是4个字节的,右移16位异...

  • 基础问题

    HashMap的hash算法和寻址算法的优化 原hash值与右移后的hash值进行异或运算(一样就是0,不一样就是...

  • 基础积累:HashMap源码解析

    1.hashmap中hash原理 从源码可知hashmap对int的32位进行了高位16位与地位16位的异或操作,...

  • HashMap 总结

    HashMap hash过程 这里先取了key的hashcode, 之后将高16位与低16位进行异或为什么要这样做...

  • (转)HashMap底层实现原理/HashMap与HashTab

    HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 ①Hash...

  • 面试精选之位操作问题集锦

    Java 中位运算符有与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)、无符号右移(>>>),...

  • java位运算

    1、左移( << )2、右移( >> )3、无符号右移( >>> )4、位与( & )5、位或( | )6、位异或...

  • HashMap面试题

    1、HashMap的原理,内部数据结构? 2、讲一下HashMap中put方法过程? 3、HashMap中Hash...

  • HashMap.put源码分析

    HashMap.put 处理流程 容量2的倍数?元素位置怎么确认的? hash值计算,低位和高位异或,在容量小的情...

  • hash map 实现原理

    HashMap 的存取实现 1.1 put refrencehash map实现hash map实现原理

网友评论

      本文标题:HashMap原理 之 hash为什么要右移16位异或?

      本文链接:https://www.haomeiwen.com/subject/ccbhbktx.html