Java如何实现哈希表?
有谁知道Java如何实现其哈希表(HashSet或HashMap)?考虑到人们可能想要放入哈希表中的各种类型的对象,似乎很难提出一个适用于所有情况的哈希函数。
有谁知道Java如何实现其哈希表(HashSet或HashMap)?考虑到人们可能想要放入哈希表中的各种类型的对象,似乎很难提出一个适用于所有情况的哈希函数。
HashMap和HashSet非常相似。实际上,第二个包含第一个实例。
HashMap 包含一个存储桶数组,以便包含其条目。数组大小始终为 2 的幂。如果未指定其他值,则最初有 16 个存储桶。
当您在其中放置一个条目(键和值)时,它会根据条目的哈希码(哈希码不是其内存地址,哈希不是模数)来计算条目将插入到的存储桶。不同的条目可能会在同一存储桶中发生冲突,因此它们将被放入列表中。
将插入条目,直到它们达到负载系数。默认情况下,此因子为 0.75,如果您不太确定正在执行的操作,则不建议更改它。0.75 作为负载因子意味着包含 16 个存储桶的 HashMap 只能包含 12 个条目 (16*0.75)。然后,将创建一个存储桶数组,其大小是上一个存储桶的两倍。所有条目将再次放入新数组中。此过程称为重新哈希,并且可能很昂贵。
因此,如果您知道将插入多少个条目,则最佳做法是构造一个指定其最终大小的哈希映射:
new HashMap(finalSize);