小编典典

一组三个字段的哈希码

java

我有三个领域,即

  1. 1号
  2. 2号
  3. 时间

我试图在Java中编写一个函数,为上述字段返回唯一的哈希值( 长期需要是hash的返回类型
)。然后,此哈希将用于在HashSet中存储与上述字段相对应的数据库行。我是编写哈希码函数的新手,有人可以复习一下我的内容。

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;
    }
}

阅读 185

收藏
2020-11-30

共1个答案

小编典典

我认为这是hashCode的特殊版本。否则,您将需要覆盖hashCode,不要定义新方法。诸如此类的容器HashSet不会获得您自己的哈希码。

  • 因此,对于for的专用版本long,您不需要使用xor(^),因为它已经很长了。只需使用该long值。
  • 当使用String的hashCode时,它不会很久,仅用于int,所以它不会“使用”您的所有空间。您可以根据需要hashCode将String的与重复long
  • 其他看起来不错。

(顺便说一句,成员应以较低的字母称呼,并且也Time应该是私人的。)

2020-11-30