Java默认字符串哈希函数在单个字符串上产生冲突

use*_*454 2 java hash hashtable hashmap

我是CS学生,所以如果我说的话听起来太荒谬,请耐心等待.它肯定对我这样做,这就是我在这里寻找答案的原因.我读了如何在Java中对字符串进行哈希处理,然后我看了一下ASCII表.字母"d"和"n"分别散列为100和110.现在,如果我要在Java中创建一个全新的hashmap,默认情况下它有10个桶.因此即使哈希码是唯一的,mod 10它们都是0.这会导致冲突.在1个字符串上发生冲突并不适合我,所以我描述的过程是否正确?提前致谢.

小智 5

你所描述的可能是正确的,由于鸽笼原理,两者都会落在同一个桶,这基本上意味着如果你有更多的物品而不是穿孔,两个或更多的物品最终会落在同一个洞里.在这种情况下,仅考虑95个可打印的ASCII字符,原则规定每个孔中至少有10个(不考虑实际值,只考虑它们的数量).

但是,shazin的答案也是正确的,因为哈希值实际上并没有用作映射中值的标识,而是用于查找kay/value对所属的桶,然后桶中的值是检查与他们的equals()方法是否相等(或使用==,如果使用IdentityHashMap.)