密钥删除后安全迭代hashmap的值集合?

时间:2014-03-17 07:06:11

标签: java

    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对,只有密钥。

4 个答案:

答案 0 :(得分:1)

地图中的键和值链接在一起。 Map是&#34;没有别的&#34;而不是SetMap.Entry个对象。 (见.entrySet())。实际上,删除密钥会删除整个条目。

.keySet().values()方法只是从这些条目中构建ad-hoc SetCollection

请注意,如果不是这种情况,则无法保证密钥的迭代顺序与值的迭代顺序相同。这会很烦人,不是吗? ;)

答案 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类的对象,其中包含KeyValue个字段。当您在地图上调用remove时,它将根据hash code值找到该对象,并检查equality是否为true,它将删除整个对象引用。