Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eclipse生成的哈希代码_Java_Eclipse_Hashcode - Fatal编程技术网

Java Eclipse生成的哈希代码

Java Eclipse生成的哈希代码,java,eclipse,hashcode,Java,Eclipse,Hashcode,在本文中,我阅读了一些与hashcode实现相关的答案,以及使用XOR运算符的建议。(例如) 当我使用Eclipse生成hashcode函数时,字段是一个对象,时间戳很长,输出是: public int hashCode() { final int prime = 31; int result = 1; result = prime * result + field == null) ? 0 : field.hashCode()); return result;

在本文中,我阅读了一些与hashcode实现相关的答案,以及使用XOR运算符的建议。(例如)

当我使用Eclipse生成hashcode函数时,
字段
是一个对象,
时间戳
很长,输出是:

public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result
        + field == null) ? 0 : field.hashCode());
  return result;
}
不使用下面的XOR运算符有什么原因吗

  result = prime * result + (int) (timestamp ^ (timestamp >>> 32));

日食是安全的出路。虽然使用素数、乘法和加法的计算方法比单个XOR慢,但在有多个字段的情况下,它提供了总体上更好的哈希代码

考虑一个简单的例子——一个有两个
String
s、
a
b
的类。你可以用

a.hashCode() ^ b.hashCode()

现在考虑两个对象:

a = "ABC"; b = "XYZ"

第一种方法将为它们生成相同的散列码,因为XOR是对称的;第二种方法将产生不同的散列码,这很好,因为对象不相等。通常,您希望非相等对象尽可能多地具有不同的哈希代码,以提高这些对象的基于哈希的容器的性能。
31*a+b
方法比XOR更好地实现了这一目标

请注意,当处理同一对象的部分时,如

timestamp ^ (timestamp >>> 32)

上面的论点要弱得多:遇到两个时间戳,它们之间的唯一区别是它们的上下部分被交换,这比两个具有交换的
a
b
字段值的对象更难想象。

我在这里看到一个异或
prime*result+(int)(时间戳^(时间戳>>32))
…@Heuster这是他的编辑失误。实际上Eclipse只创建这一行(代码>结果=prime*result+field==null)?0:field.hashCode())
a = "XYZ"; b = "ABC"
timestamp ^ (timestamp >>> 32)