java中对象的一致哈希码

sag*_*ggy 2 java hashcode

在java中,当我们多次运行应用程序时,是否可以为对象获取一致的哈希代码

Ste*_*n C 5

当然.例如,如果它是String,则String.hashCode()每次运行应用程序时都会提供一致的哈希码.

如果哈希码包含除了对象的组件字段的值之外的其他内容,则只会遇到麻烦; 例如,身份哈希码.当然,这意味着对象类需要Object.hashcode()在某些时候覆盖,因为该方法为您提供了一个标识哈希码.

跟进

从对其他答案的评论来看,OP似乎仍在追求独特哈希函数的虚幻目标; 即一些函数,它会将任何String映射到一个对所有可能的字符串都唯一的哈希码.

不幸的是,在一般情况下这是不可能的,在这种情况下.此外,这是一个简单的事情来构建一个证明,一个Stringint哈希生成独特的功能int价值是数学上是不可能的.(我不会厌烦你的细节......但证据的基础是String价值多于int价值观.)

实际上,这种散列函数可能的唯一情况是当输入类型的所有可能值的集合具有不大于整数类型的可能值的数量的大小时.有散列函数,将映射一个byte,char,shortint以一种独特的int,但映射的哈希函数long值来唯一int值是不可能的.