在采访中,采访者问我 - 基于Class计算的哈希码是什么?
我告诉他,哈希码将根据类中的字段或变量计算。他给了我一些表达,让我觉得答案是错误的。
我阅读了java doc,但我没有明确的想法。我读了帖子how is hascode calculated in java因为有整数哈希码和字符哈希码。谁能告诉我如何计算特定对象的哈希码以及什么是Interger哈希码和字符串哈希码?
答案 0 :(得分:0)
你不清楚你的意思是“hashCode()方法使用class来计算哈希码?”。如果你看一下Object.hashCode()
方法的签名,你就会意识到
java.lang.Object
类)会覆盖此方法,那么它可以负责为该类的实例创建有意义的哈希代码。除其他外,这有助于将此类的实例作为哈希表中的键(使用java.util.Hashtable
或java.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 :(得分:0)
如果考虑使用hashCode()
类的Object
方法,则该方法是通过将对象的地址转换为整数来计算的。
参考: https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()