在HashMap中,我们知道在存储键和值时,实际上填充了Map.entry对象,其中Map.entry.key映射到插入hashMap的键,Map.entry.value映射到插入hashmap的值。现在我的问题是提供的密钥是如何与hashmap中提供的值相关的。
我的意思是如果我的理解是正确的密钥不直接引用hashMap的值,因此即使这个引用是null,它也不应该影响hashmap中收集垃圾的值。
答案 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
(仅用于理解)确定密钥存储在表数组中的索引。