存储在HashMap中的密钥实际上指向HashMap中的值

时间:2015-03-20 09:27:26

标签: java collections

在HashMap中,我们知道在存储键和值时,实际上填充了Map.entry对象,其中Map.entry.key映射到插入hashMap的键,Map.entry.value映射到插入hashmap的值。现在我的问题是提供的密钥是如何与hashmap中提供的值相关的。

我的意思是如果我的理解是正确的密钥不直接引用hashMap的值,因此即使这个引用是null,它也不应该影响hashmap中收集垃圾的值。

2 个答案:

答案 0 :(得分:1)

您的理解不正确。键值对存储为名为Map.Entry的类的对象。 null密钥也是HashMap中的有效密钥,其Hashvalue等于0。如果您将密钥指定为null,它将存储为唯一键值对,并且具有null键的任何其他条目将覆盖前一个条目。 Map.Entry.key内的对象可能是null,但它本身存储在hashMap的LinkedList(Bucket of Entries)中,因此不会是Garbage Collected。要从HashMap中删除对象,请调用.remove(key)方法而不是取消键并取决于GC

答案 1 :(得分:0)

你的理解可能是正确的。我建议你阅读JDK的源代码。

实际上,Hashmap或其他哈希集合通常使用数组。在java中

Entry<K,V>[] table

密钥hashcode() % tableSize(仅用于理解)确定密钥存储在表数组中的索引。