j**********g 发帖数: 204 | 1 How to implement a hashmap?问的很细,从怎么计算value,到怎么存储,怎么把值取
出来。
我跟本没用过hashmap,硬着头皮面了40分钟,对方很nice,不断引导我向正确的方向
走,但是我回答的还是一塌糊涂。
我是用取模的方式来计算hash value的,对方问为什么要用这个方式,我回答因为hash
function的特性是要one way的
对方问如果key是string, value是任何的object,你怎么计算value的。
我说计算的是hash value,对方问你是不是就直接把这个value返回了?
有了hashmap put function返回的value,你是怎么把原来的value取出来的,是如何查
找的。
感觉从string计算出hash value是一个问题。
总之答得稀里糊涂的。
给大家借鉴一下吧。 |
g**********y 发帖数: 14569 | 2 这是Java SDK里String的hash实现:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
public int hashCode() {
int h = hash;
int len = count;
if (h == 0 && len > 0) {
int off = offset;
char val[] = value;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
} |
c*******g 发帖数: 1996 | 3 g++中的
00062 inline size_t __stl_hash_string(const char* __s)
00063 {
00064 unsigned long __h = 0;
00065 for ( ; *__s; ++__s)
00066 __h = 5*__h + *__s;
00067
00068 return size_t(__h);
00069 } |
h******n 发帖数: 68 | |
h******n 发帖数: 68 | 5 mark, 赞
hash
【在 j**********g 的大作中提到】 : How to implement a hashmap?问的很细,从怎么计算value,到怎么存储,怎么把值取 : 出来。 : 我跟本没用过hashmap,硬着头皮面了40分钟,对方很nice,不断引导我向正确的方向 : 走,但是我回答的还是一塌糊涂。 : 我是用取模的方式来计算hash value的,对方问为什么要用这个方式,我回答因为hash : function的特性是要one way的 : 对方问如果key是string, value是任何的object,你怎么计算value的。 : 我说计算的是hash value,对方问你是不是就直接把这个value返回了? : 有了hashmap put function返回的value,你是怎么把原来的value取出来的,是如何查 : 找的。
|