关于hashCode()的模拟代码

发布网友

我来回答

2个回答

热心网友

String的hashCode的实现 (根据jdk1.6)
private hash=0;
public int hashCode() {
//hash默认0
int key= hash;
if (key == 0) {
//String的偏移值
int off = offset;
//value是这个String的char[]数组
char val[] = value;
//count是这个String的长度
int len = count;
//以下是hashCode的具体实现还是比较有意思的,不过不能保证唯一,所以还需要hash冲突
for (int i = 0; i < len; i++) {
key = 31*key + val[off++];
}
hash = key ;
}
return key ;
}

热心网友

本来array的长度固定就会发生这样的事,要实现这个功能,首先要选定适合的计算hashcode的function. Array的长度也有讲究,另外如果发生了冲突,根据Hashtable地实现,也有很多做法,常见的是在每个数组元素位置存放链表,把冲突的放到对应桶的链表上去。

建议你直接去看hashtable地实现代码,和String类型的hashcode()如何取得的。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com