[英]Safe to iterate values collection of hasmap after key removal?
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.
}
我不确定哈希图是否仅依靠垃圾回收器来最终删除键中映射的值,还是立即将其删除? 我看不到有一种方法可以保证删除哈希图中的k / v对,只是键。
映射中的键和值链接在一起。 一个Map
就是一Set
Map.Entry
对象。 (请参阅.entrySet()
)。 实际上,删除键会删除整个条目。
.keySet()
和.values()
方法仅根据这些条目构造临时Set
和Collection
。
请注意,如果不是这种情况,则无法保证键的迭代顺序与值的迭代顺序相同。 这会很烦,不是吗? ;)
Hashmap.remove(key)
删除Hashmap.remove(key)
的映射,并返回映射的值;如果没有映射,则返回null
。 如果您不持有对该值的任何其他引用,则将对其进行垃圾回收。 因此,不需要其他动作。
移除方法的Java文档说:
//Removes the mapping for the specified key from this map if present.
public V remove(Object key) {....
因此,删除密钥还可以确保删除与其关联的值。
是值将立即删除, hashmap
的条目不过是具有Key
和Value
字段的Entry
Class对象。 当您在地图上调用remove时,它将基于hash code
值找到对象,并检查是否equality
如果为true,则会删除整个对象引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.