后台:词典使用哈希函数为您输入的每个值生成索引。
答案 0 :(得分:2)
关于哈希函数的唯一性的假设是错误的。
如果我们采用Java的HashMap
,它使用密钥的hashCode()
并在其上应用补充哈希函数(以防御质量差的哈希函数)。然后获取计算的哈希值并将其映射到地图存储中的索引,该索引通常比哈希值小得多。
因此,即使散列函数会为每个键返回一个唯一值(它不是必需的),HashMap
仍会将该值规范化为{{1的存储索引的小得多的索引}}。因此,没有溢出(只要您不在HashMap
中插入太多元素)。