当前位置: 首页 > 面试题库 >

有效Java hashCode()实现中的位移

濮阳宁
2023-03-14
问题内容

我想知道是否有人可以详细解释

(int)(l ^ (l >>> 32));

在以下哈希码实现中执行(由eclipse生成,但与有效Java相同):

private int i;
private char c; 
private boolean b;
private short s;
private long l;
private double d;
private float f;

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + i;
    result = prime * result + s;
    result = prime * result + (b ? 1231 : 1237);
    result = prime * result + c;
    long t = Double.doubleToLongBits(d);
    result = prime * result + (int) (t ^ (t >>> 32));
    result = prime * result + Float.floatToIntBits(f);
    result = prime * result + (int) (l ^ (l >>> 32));
    return result;
}

谢谢!


问题答案:

基本上,它对long的高32位与低32位进行异或。这是分解版本:

// Unsigned shift by 32 bits, so top 32 bits of topBits will be 0,
// bottom 32 bits of topBits will be the top 32 bits of l
long topBits = l >>> 32;

// XOR topBits with l; the top 32 bits will effectively be left
// alone, but that doesn't matter because of the next step. The
// bottom 32 bits will be the XOR of the top and bottom 32 bits of l
long xor = l ^ topBits;

// Convert the long to an int - this basically ditches the top 32 bits
int hash = (int) xor;

回答您的评论:您有一个long值,必须将其转换为int才能作为哈希的一部分(结果必须仅为32位)。你打算怎么做?您 可以 只使用低32位-但这意味着
高32位的更改将被忽略,这不会使其成为一个很好的哈希。这样,输入的单个位的改变 总是 导致哈希的单个位的改变。诚然,您仍然可以轻松地发生冲突-
例如,将第7位和第39位 更改,或者将其他任何一对32位位置分开-但是,既然您将要从2 64个可能的值更改为2 32。



 类似资料:
  • 我想看看我是否在正确的轨道上,或者有没有更有效的方法来实现这一点?

  • 问题内容: 在Python中,这里描述了一种有效的for else循环实现 示例代码: 在Java中,我需要编写更多代码来实现相同的行为: 在Java中,还有没有比Python更出色的实现else循环的实现? 问题答案: 这样做是这样的:

  • 问题内容: 我想找到设置为的最高有效位。我已经从尝试一切可能的方式来进行或运算所有的位从到和它不工作。 就像我想拥有一样。 问题答案: 如果您坚持直接使用按位运算符,则可以尝试如下操作: 我们将掩码初始化为,因为它表示1后跟31 0。我们使用该值来测试索引31(第32个点)是否为1。当将此值与一起使用时,除非在中设置了相应的位,否则将得到0 。如果是这种情况,我们返回。如果不是,则将掩码向右移动1

  • 我已经用python编写了medians算法的median的实现,但是它似乎没有输出正确的结果,而且对我来说它似乎也没有线性复杂度,知道我哪里出错了吗? 这个函数是这样调用的: 乐:不好意思。GetMed是一个简单地对列表排序并返回len(list)处的元素的函数,它应该在那里被选择,我现在修复了它,但我仍然得到错误的输出。至于缩进,代码工作没有错误,我看不出有什么问题:-?? LE2:我期望50

  • 本文向大家介绍JS实现网站菜单拖拽移位效果的方法,包括了JS实现网站菜单拖拽移位效果的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS实现网站菜单拖拽移位效果的方法。分享给大家供大家参考。具体如下: 这是一个基于JavaScript的层手动实例,让网站的菜单可以拖拽移位,记得土豆网的“豆单”有这种功能。本效果还尚未彻底完成,部分地方因没有写入对应内容,因此JS可能会提示有错误。 运

  • 本文向大家介绍jquery实现企业定位式导航效果,包括了jquery实现企业定位式导航效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了jquery实现企业定位式导航的具体代码,供大家参考,具体内容如下 完整代码如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。