Java 一组三个字段的哈希代码
我有三个字段,即Java 一组三个字段的哈希代码,java,hashcode,Java,Hashcode,我有三个字段,即 第一 2号 时间 我试图用java编写一个函数,为上述字段返回一个唯一的哈希值(long需要是哈希的返回类型)。然后,该散列将用于在散列集中存储与上述字段对应的数据库行。我刚开始写散列码函数,有人能看看我有什么吗 public class HashCode { private long Number1; private long Number2; String Time; public HashCode(long Number1, long
public class HashCode {
private long Number1;
private long Number2;
String Time;
public HashCode(long Number1, long Number2, String Time){
this.Number1 = Number1;
this.Number2 = Number2;
this.Time = Time;
}
public long getHashCode() {
long hash = 3;
hash = 47 * hash + (long) (this.Number1 ^ (this.Number1 >>> 32));
hash = 47 * hash + (long) (this.Number2 ^ (this.Number2 >>> 32));
hash = 47 * hash + (this.Time != null ? this.Time.hashCode() : 0);
return hash;
}
}
我认为这是hashCode的一个特殊版本。否则您将需要覆盖hashCode,不要定义新方法。像
HashSet
这样的容器没有自己的哈希代码
- 因此,对于
的专用版本,不需要使用xor(^),因为它已经很长了。只需使用long
值即可long
- 当使用字符串的hashCode时,它不是很长,只是int,所以它不会“使用”所有的空间。您可以使用
s复制字符串的long
,以满足您的需要hashCode
- 其他的看起来不错
(顺便说一句,成员应该用小写字母称呼,时间也应该是私有的。)我认为这是hashCode的一个特殊版本。否则您将需要覆盖hashCode,不要定义新方法。像
HashSet
这样的容器没有自己的哈希代码
- 因此,对于
的专用版本,不需要使用xor(^),因为它已经很长了。只需使用long
值即可long
- 当使用字符串的hashCode时,它不是很长,只是int,所以它不会“使用”所有的空间。您可以使用
s复制字符串的long
,以满足您的需要hashCode
- 其他的看起来不错
@Override
public int hashCode() {
// you pick a hard-coded, randomly chosen, non-zero, odd number
// ideally different for each class
return new HashCodeBuilder(17, 37).
append(Number1).
append(Number2).
append(Time).
toHashCode();
}
顺便说一句,Java中的惯例是变量名以小写字母开头。你会发现给变量命名很容易混淆,比如Number1
,Number2
,等等,因为人们会把它们与类型的名称混淆(比如String
,Number
,Long
,等等)。你可以直接使用from,不用再担心手工操作了
@Override
public int hashCode() {
// you pick a hard-coded, randomly chosen, non-zero, odd number
// ideally different for each class
return new HashCodeBuilder(17, 37).
append(Number1).
append(Number2).
append(Time).
toHashCode();
}
顺便说一句,Java中的惯例是变量名以小写字母开头。你会发现给变量命名很容易混淆,比如Number1
,Number2
,等等,因为人们会把它们与类型的名称混淆(比如String
,Number
,Long
,等等)