发布网友
共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()如何取得的。