Java 哈希代码实现

Java 哈希代码实现,java,Java,关于这个问题,我还有一个问题 我有一个“value”类,它将实例持久化到数据库中。因此,这个类的实例都有一个唯一的ID 因此,我只需返回这个id就实现了hash-code方法(以及相关的equals方法) 当使用Eclipse hashcode生成器并告诉Eclipse在生成时仅使用ID属性时,我有以下方法: @Override public int hashCode() { final int prime = 31; int re

关于这个问题,我还有一个问题

我有一个“value”类,它将实例持久化到数据库中。因此,这个类的实例都有一个唯一的ID

因此,我只需返回这个id就实现了hash-code方法(以及相关的equals方法)

当使用Eclipse hashcode生成器并告诉Eclipse在生成时仅使用ID属性时,我有以下方法:

    @Override
    public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + id;
            return result;
    }
我认为简单地返回id更有效,因为我知道这个id是唯一的。我说得对吗


提前感谢

如果你的目标是身份独特性,那么绝对是的

请记住,由于您(可能)没有通过哈希函数的可能范围(即int的所有值)随机分布值,因此对于任何依赖于哈希均匀分布的代码来说,性能可能是一个问题


另外,“可能”来自我的假设,即这些唯一的int可能是数据库中的标识值。如果它们确实是随机分布的,请忽略我的警告。

这并不是ID的唯一性使其成为正确的操作,而是事实上它用于平等性检查,并且是唯一用于平等性检查的操作


Eclipse中的样板文件实际上只在使用多个字段来实现相等时才相关。

java.util.HashMap已经对hashcode应用了一个补充的哈希函数来改进分发,因此分发不应该是一个问题。很高兴知道,但HashMap不是使用hashcode()的唯一代码所以分布可能是个问题。若结果为1,为什么要按结果进行多重计算。您的函数实际上是“return 31+id;”。顺便说一句,您最好去掉31,因为它不会改变id的分布。简言之,您实现的hashcode没有任何特殊功能,您应该只返回id。也就是说,我不确定什么是“更好的”.+1强调这不是唯一性:-)。说得好。