Java HashMap中存储了两次“key”吗?

时间:2011-08-19 13:45:08

标签: java hashmap

当将Key-Value对添加到Java中的HashMap时,为了确定值对象的存储区位置,哈希映射实现使用hashCode为“key”对象并对其应用散列。最后,键值对存储在存储桶中。存储密钥对象,以便在发生冲突时可以正确地检索对象。

我的问题是,“密钥”对象是在HashMap中存储两次,一次作为密钥然后在存储区中,其中键值对存储在链接列表中?

4 个答案:

答案 0 :(得分:2)

没有

首先:HashMap和(事实上其他任何)只能将引用存储到您传递给它的某个对象中。因此,即使 if 它存储对密钥的两个引用,对它的内存要求也是最小的。

下一步:HashMap的实际实现不是由Java标准规定的,因此它可能(并且将会)根据您使用的 JVM而有所不同

最后,查看at the OpenJDK source code of HashMapEntry类只有一个对密钥的引用(在恰当名称key字段中),因此密钥只存储一次。

答案 1 :(得分:1)

没有。要选择正确的存储桶,请对该键进行哈希处理,然后将其用作索引。不需要在这里存储任何东西。

答案 2 :(得分:1)

我不确定,但似乎没有必要这样做。在HashMap中访问存储桶时,哈希函数将应用于正在搜索的密钥。然后,它可以将此密钥与存储的密钥进行比较。

答案 3 :(得分:0)

没有。如果您想确切了解HashMap的工作原理,那么您可以查找源代码。 JDK安装目录中应该有一个名为src.zip的文件,其中包含标准库中所有类和接口的Java源代码。