我有三个字段,即
- Number1
- Number2
- Time
我正在尝试用 java 编写一个返回唯一哈希值的函数(long 需要是 hash 的返回类型) 对于上述字段。然后,该哈希将用于存储与哈希集中上述字段相对应的数据库行。我是编写哈希代码函数的新手,有人可以回顾一下我所拥有的内容吗?
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;
}
}
你可以只使用哈希码生成器 http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/builder/HashCodeBuilder.html from 公共语言 http://commons.apache.org/lang/并且不必再担心手动执行此操作。
@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
, etc.).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)