当将Key-Value对添加到Java中的HashMap时,为了确定值对象的存储区位置,哈希映射实现使用hashCode为“key”对象并对其应用散列。最后,键值对存储在存储桶中。存储密钥对象,以便在发生冲突时可以正确地检索对象。
我的问题是,“密钥”对象是在HashMap中存储两次,一次作为密钥然后在存储区中,其中键值对存储在链接列表中?
答案 0 :(得分:2)
没有
首先:HashMap
和(事实上其他任何)只能将引用存储到您传递给它的某个对象中。因此,即使 if 它存储对密钥的两个引用,对它的内存要求也是最小的。
下一步:HashMap
的实际实现不是由Java标准规定的,因此它可能(并且将会)根据您使用的 JVM而有所不同
最后,查看at the OpenJDK source code of HashMap
,Entry
类只有一个对密钥的引用(在恰当名称key
字段中),因此密钥只存储一次。
答案 1 :(得分:1)
没有。要选择正确的存储桶,请对该键进行哈希处理,然后将其用作索引。不需要在这里存储任何东西。
答案 2 :(得分:1)
我不确定,但似乎没有必要这样做。在HashMap中访问存储桶时,哈希函数将应用于正在搜索的密钥。然后,它可以将此密钥与存储的密钥进行比较。
答案 3 :(得分:0)
没有。如果您想确切了解HashMap
的工作原理,那么您可以查找源代码。 JDK安装目录中应该有一个名为src.zip
的文件,其中包含标准库中所有类和接口的Java源代码。