StringTable的哈希冲突

看网上说的,为了解决哈希冲突采用了链表法。
那什么情况下会有哈希冲突呢?

冲突很常见吗?看了一下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空间满了的情况。
如果会有,那可以说明一下吗?
求大佬讲一讲!

阅读 2.2k
2 个回答

hashCode本身冲突可能不很常见
但是对于HashMap来说,要对hashCode取模得到数组下标,比如一个内部数组长度为8的HashMaphashCode1和为9的两个对象的下标都是1,就会冲突,这时候就要上链表了

int 取值在 -2147483648 至 2147483647 之间,一个十个字符的字符串有26的十次方种可能值,如果没有哈希冲突,多余的值往哪儿放

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏