hashCode()方法使用类来计算哈希码?

问题描述 投票:0回答:2

在面试中,面试官问我 - 基于Class计算的哈希码是什么?

我告诉他,hashcode将根据类中的字段或变量计算。他给了我一些表达,让我觉得答案是错的。

我读了java文档,但我没有明确的想法。我读了帖子how is hascode calculated in java,因为有整数哈希码和字符哈希码。谁能告诉我如何计算特定对象的哈希码以及什么是Interger哈希码和字符串哈希码?

hashcode
2个回答
1
投票

目前尚不清楚你的意思是“hashCode()方法使用类来计算哈希码?”。如果你看一下Object.hashCode()方法的签名,你就会意识到这一点

  1. 它是任何Java类都可以覆盖的实例方法。
  2. 如果一个类(默认情况下扩展了java.lang.Object类)覆盖了这个方法,那么它可以负责为该类的实例创建一个有意义的哈希代码。除其他外,这有助于将此类的实例作为哈希表中的键(使用java.util.Hashtablejava.util.HashMap实现)。

如果你看一下这个方法的一些标准库(JDK)类实现,你会发现这些类有意义地实现了这个方法。

hashCode()类的java.lang.Integer实现正确地选择返回该类的实例所代表的整数值。

hashCode()类的java.lang.String实现更复杂,您可以在源代码中找到它:

public int hashCode() {
    int h = hash;
    if (h == 0 && value.length > 0) {
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
    }
    return h;
}

由于性能(和正确性)的原因,这里有很多内容,但您可以了解字符串的哈希码是基于字符串的字符构成的。


1
投票

如果考虑hashCode()类的Object方法,则通过将对象的地址转换为整数来计算。

参考:https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()

© www.soinside.com 2019 - 2024. All rights reserved.