2011-08-19 121 views
3

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

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

+0

除了水桶,没有其他地方可以存放。所以,密钥只存储一次,即存储在桶中。 – ernesto

回答

2

首先:一个HashMap和(别的其实)永远只能存储参考一些对象,你进入它。因此,即使如果它是存储两个引用的密钥,内存要求是最小的。

下一页:实际实施HashMap不是由Java标准规定的,所以它可能(而且会)根据您使用的 JVM会有所不同。

最后,看着at the OpenJDK source code of HashMapEntry类只有一个引用(关键字key字段),所以密钥只存储一次。

+0

“取决于您使用的是哪个JVM”取决于Java运行时库的哪个实现,而不是JVM本身。 – Raedwald

+1

@Raedwald:true,但通常* JVM绑定到运行时库实现。 –

1

否。要选择正确的存储桶,将该密钥进行散列处理,然后将其用作索引。没有必要在这里存储任何东西。

0

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

1

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