java - HashMap 实现问题

标签 java hash implementation hashmap

HashMap 包含一个哈希表,它是一个保存值的数组

据我所知,哈希表有一个初始大小,但在多次调用 put() 后它会增加(取决于负载因子)

无论如何,我想知道在更改哈希表的大小后如何找到一个值,因为我知道为了计算特定键的 has 代码,您可以使用表的大小

例如key*prime%size

那么它是如何工作的呢?

最佳答案

Visage 概括地回答了这个问题:从键计算出的哈希值通过以映射的实际大小为模展开来映射到桶中,并且当调整映射大小时,所有元素再次分布到新的范围内桶。

但是,从 Java 1.4 开始,幕后发生了一些值得了解的事情。首先,在传统的 HashMap 中,大小最好是质数,因为这有助于将元素更均匀地分布在桶的范围内。然而,在 Java 1.4 HashMap 中,大小始终是 2 的幂!这会使标准分布表现得非常糟糕 - 然而,在这个实现中,散列值在内部使用非常快速的算法被重新散列以平滑分布。

Java 专家通讯中的更多详细信息,问题 5454b .

关于java - HashMap 实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3341678/

相关文章:

java - 使用 Java 以通用方式解析嵌套与平面 XML 元素

python - python中强大快速的哈希函数(搜索算法)

java - 定义接口(interface)和类的最佳/标准方法

java - WebDriver 不能可靠地单击链接或按钮

java - C++ 与 Java 中函数重载的歧义

php - 在 php 中散列(用盐)用户名和密码

java - 循环数组的队列实现

java - 如何使用java中的列表结构确定java中当前元素之后是否存在另一个元素

java - jcifs copyTo 从一个网络到另一网络路径不起作用

go - 如何在 Golang 中计算嵌套/迭代 MD5 哈希?