有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么字典初始化时不会发生内存溢出?

背景:字典使用哈希函数为您输入的每个值生成索引

  1. 虽然说索引在每个输入中都是唯一的,但我只是 想知道生成的确切哈希函数是什么 每个输入的唯一值
  2. 让我们假设(因为我不确定),存在一个哈希函数,它为每个输入生成唯一的索引。那么字典的初始化大小是多少?我假设它是动态的,但是如果一个索引是10,而另一个输入是123456呢?它必须使用大小为123457的数组-这不会导致内存溢出吗

PS:我对什么是哈希函数以及它的作用有理论上的了解,但我还没有看到它的实际实现。而且,由于许多语言都有内置的数据结构,这让我很好奇:)


共 (1) 个答案

  1. # 1 楼答案

    关于哈希函数唯一性的假设是错误的

    例如,如果我们以Java的HashMap为例,它使用密钥的hashCode()并对其应用一个补充的哈希函数(以防止质量差的哈希函数)。然后is获取计算出的散列值,并将其映射到映射存储中的索引,该索引通常比散列值小得多

    因此,即使哈希函数会为每个键返回一个唯一的值(这不是必需的),HashMap仍会将该值规范化为HashMap存储的更小索引。因此不会出现溢出(只要不在Map中插入太多元素)