我是CS学生,所以如果我说的话听起来太荒谬,请耐心等待。它肯定对我这样做,这就是我在这里寻找答案的原因。 我读了如何在Java中对字符串进行哈希处理,然后我看了一下ASCII表。字母“d”和“n”分别散列为100和110。现在,如果我要在Java中创建一个全新的hashmap,默认情况下它有10个桶。因此即使哈希码是唯一的,mod 10它们都是0.这会导致冲突。 在1个字符串上发生冲突并不适合我,所以我描述的过程是否正确? 提前谢谢。
答案 0 :(得分:5)
你所描述的可能是正确的,由于pigeonhole principle,两者都会落在同一个桶上,这基本上意味着如果你有更多的物品而不是穿孔,那么两个或更多的物品将最终落在同一个洞。在这种情况下,仅考虑95个可打印的ASCII字符,原则规定每个孔中至少有10个(不考虑实际值,只考虑它们的数量)。
然而,shazin的答案也是正确的,因为哈希值实际上并没有用作地图中值的标识,而是用于查找kay / value对所属的存储桶,然后使用equals()
方法(或使用==
检查存储区中的值是否相等,如果使用IdentityHashMap
。)
答案 1 :(得分:3)
哈希实际上在基于哈希的集合中用作索引或分组机制。哈希不用作实际参考。 Hash用于查找元素可能首先包含的存储区。
正如您所说d
和n
可以包含在同一个存储桶中,但在此之后,本例中的实际值d
和n
可用于引用实际对象。由于Hashmaps不允许重复键,因此您可以确保始终只有一个d
和一个n
。