Java 哈希代码如何在内部创建?

Java 哈希代码如何在内部创建?,java,object,hashcode,Java,Object,Hashcode,有人告诉我java是如何在内部创建哈希代码的吗 package swain.javainterviewhub.blogspot.in; public class JavaInterviewHub { public static void main(String[] args) { String str="Alex"; System.out.println(str.hashCode()); }

有人告诉我java是如何在内部创建哈希代码的吗

package swain.javainterviewhub.blogspot.in;


    public class JavaInterviewHub {

        public static  void main(String[] args) {

           String str="Alex";
           System.out.println(str.hashCode());
        }

    }
    Output:2043454
密钥Hashcode算法Hashcode

Alex A(1)+L(12)+E(5)+X(24)=42

字符串对象的哈希代码计算为

 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
您还可以查看源代码以获取更多信息(此处为Oracle JDK 8u45)

public int hashCode(){
int h=散列;
如果(h==0&&value.length>0){
char val[]=值;
for(int i=0;i
Java中哈希代码的生成取决于相关对象的类型。对于字符串,Java文档()中描述了算法

返回此字符串的哈希代码。字符串对象的哈希代码计算为

 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用int算术,其中s[i]是字符串的第i个字符,n是字符串的长度,^表示求幂。(空字符串的哈希值为零。)


这是一个简单的逻辑。猛击我的头:D@sᴜʀᴇsʜᴀᴛᴛᴀ 那个javadoc伤了我一段时间的眼睛:)的可能重复对于一个更具挑战性的问题,尝试将俳句(5音节,7音节,5音节)生成为hashCode()为0的字符串
 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]