how does HashMap works in Java?
我不明白问题是什么意思,他让我以put(key,value)为例,我就说用key算出
bucket的位置,把value存进去。
他就继续问我怎么用key算出存在hash表的位置。
这才明白他是在问我Java HashMap怎么计算hash value.跟他确认了一下,就是这个意
思。
我说就是用hash function算,他又问我到底是怎么算的,总之就是问得很细致,看样
子是要求我看过代码才行。
面试结束后,我按了一下这个页面 http://www.docjar.com/html/api/java/util/HashMap.java.html
不知道是不是源代码。
又找了一下hash函数,就是移位异或操作。
hash函数的输入参数是把key用hashCode函数计算成一个整数。hashcode的返回值实际
是object的address。
可是,java不是不能找地址吗?
我看了代码,不过hashCode函数前面有个native关键字,意思是用其他语言写的函数。
看来java里用别的语言写的函数来找对象地址了。
谁能找到这个hashCode函数的源代码?
e***s 发帖数: 799
2
他要问这个?
264 static int hash(int h) {
265 // This function ensures that hashCodes that differ only by
266 // constant multiples at each bit position have a bounded
267 // number of collisions (approximately 8 at default load
factor).
268 h ^= (h >>> 20) ^ (h >>> 12);
269 return h ^ (h >>> 7) ^ (h >>> 4);
270 }
这太牛B了吧?
【在 b****g 的大作中提到】 : how does HashMap works in Java? : 我不明白问题是什么意思,他让我以put(key,value)为例,我就说用key算出 : bucket的位置,把value存进去。 : 他就继续问我怎么用key算出存在hash表的位置。 : 这才明白他是在问我Java HashMap怎么计算hash value.跟他确认了一下,就是这个意 : 思。 : 我说就是用hash function算,他又问我到底是怎么算的,总之就是问得很细致,看样 : 子是要求我看过代码才行。 : 面试结束后,我按了一下这个页面 : http://www.docjar.com/html/api/java/util/HashMap.java.html
b****g 发帖数: 192
4
如果我能回答到这一步(用位操作计算hash value),他就会问我那个数值是怎么来的。
你有没有注意到这个hash函数的参数是int型?实际上算hash value是
int hash = hash(key.hashCode());
于是我就要先把key(可能是个class,int,char)转成int。
于是我查了一下Object的code,找到了关于hashCode的部分: http://www.docjar.com/html/api/java/lang/Object.java.html
(This is typically implemented by converting the internal
address of the object into an integer, but this implementation
technique is not required by the JavaTM
programming language.)
public native int hashCode();
所以我还是没找到hashCode函数是怎么实现的。。。你能帮我找找吗?
by
【在 e***s 的大作中提到】 : 他要问这个? : 264 static int hash(int h) { : 265 // This function ensures that hashCodes that differ only by : 266 // constant multiples at each bit position have a bounded : 267 // number of collisions (approximately 8 at default load : factor). : 268 h ^= (h >>> 20) ^ (h >>> 12); : 269 return h ^ (h >>> 7) ^ (h >>> 4); : 270 } : 这太牛B了吧?
【在 c******4 的大作中提到】 : By default, the hashcode() in Object class returns unique value, which is : decided by : the address of the object in memory. : Say, you have a HashMap