java - 如何从三个 long 生成哈希码

标签 java hashcode hash-code-uniqueness

我有一个以坐标作为键的 HashMap。

Coordinates 有 3 个长整型,分别代表 x、y 和 z 坐标。 (坐标是并且需要是自定义类,坐标需要是 longs)。

现在我希望能够访问例如字段 [5, 10, 4] 通过做:hashMap.get(new Coordinate(5, 10, 4)) .

我已经实现了 equals 方法,但这还不够,因为显然我还需要为 hashCode 提供一个实现。所以我的问题是如何从三个 long 生成唯一的 hashCode?

附加:使用来自外部库的哈希生成器不是选项。

最佳答案

Joshua Bloch 在 chapter 3 中告诉您如何为 Coordinate 类编写 equals 和 hashCode。他的“Effective Java”。

像这样:

public class Coordinate
{
    private long x;
    private long y;
    private long z;

    @Override
    public boolean equals(Object o)
    {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Coordinate that = (Coordinate) o;

        if (x != that.x) return false;
        if (y != that.y) return false;
        if (z != that.z) return false;

        return true;
    }

    @Override
    public int hashCode()
    {
        int result = (int) (x ^ (x >>> 32));
        result = 31 * result + (int) (y ^ (y >>> 32));
        result = 31 * result + (int) (z ^ (z >>> 32));
        return result;
    }
}

关于java - 如何从三个 long 生成哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5730149/

相关文章:

c# - .Net C# String.GetHashCode() 替代方案

hash - 是否存在可以保证哈希算法唯一的情况?

java - spring boot hibernate关系映射错误

java - Spring AOP 计算从另一个调用特定方法的次数

Java 树形图 : Different object after "put"?

2 个哈希的 Java 哈希

java - 为什么默认对象的 hashCode 在不同的设备上返回不同的值?

java - SQL查询Android Where子句的问题

java - 使用 XPath 连接选定子节点的值

java - 是否可以使用hashCode作为内容唯一ID?