HashMap<String, DBrow> datamap = new HashMap<String, DBrow>();
datamap.remove(key);
Collection<DBrow> values = datamap.values();
for(DBrow dbrow : values){
//is key's value removed from hashmap?
//ignore case where another key may have the same reference.
}
我不确定hashmap是否只依赖于垃圾收集器来最终删除从key映射的值,或者它是否立即被删除?我没有看到一种方法来保证删除散列图中的k / v对,只有密钥。
答案 0 :(得分:1)
地图中的键和值链接在一起。 Map
是&#34;没有别的&#34;而不是Set
个Map.Entry
个对象。 (见.entrySet()
)。实际上,删除密钥会删除整个条目。
.keySet()
和.values()
方法只是从这些条目中构建ad-hoc Set
和Collection
。
请注意,如果不是这种情况,则无法保证密钥的迭代顺序与值的迭代顺序相同。这会很烦人,不是吗? ;)
答案 1 :(得分:0)
Hashmap.remove(key)
删除键的映射并返回映射值,如果没有映射则返回null
。如果您没有对该值进行任何其他引用,则将对其进行垃圾回收。因此,不需要采取其他行动。
答案 2 :(得分:0)
remove方法的Java doc说:
//Removes the mapping for the specified key from this map if present.
public V remove(Object key) {....
因此删除密钥也可确保删除与之关联的值。
答案 3 :(得分:0)
是值将立即删除,hashmap
内的条目只是Entry
类的对象,其中包含Key
和Value
个字段。当您在地图上调用remove时,它将根据hash code
值找到该对象,并检查equality
是否为true,它将删除整个对象引用。