看网上说的,为了解决哈希冲突采用了链表法。
那什么情况下会有哈希冲突呢?
冲突很常见吗?看了一下Stirng里面hashCode方法,这个会导致不同的字符数组产生相同的hashCode吗?
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;
}
如果不会导致那根本就不会有哈希冲突的情况,只会有StringTable空间满了的情况。
如果会有,那可以说明一下吗?
求大佬讲一讲!
hashCode
本身冲突可能不很常见但是对于
HashMap
来说,要对hashCode
取模得到数组下标,比如一个内部数组长度为8的HashMap
,hashCode
为1
和为9
的两个对象的下标都是1,就会冲突,这时候就要上链表了