Java HashMap去除键/值

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我只是寻找一个解释和/或洞察力,为什么它更好地遍历一个HashMap。

例如下面的代码(在我眼中)完全相同(或它应该)。但是,如果我不遍历HashMap,则不会删除密钥。

_adjacentNodes.remove(node);        

Iterator<Map.Entry<String, LinkedList<Node>>> iterator = _adjacentNodes.entrySet().iterator();
while (iterator.hasNext()) {
     Map.Entry<String, LinkedList<Node>> entry = iterator.next();
     if(node.getNodeID().contentEquals(entry.getKey())){
          iterator.remove();
     }
}

到底是怎么回事?

提问于
用户回答回答于

由于你的密钥是一个字符串,你应该删除String not Node。所以试试

_adjacentNodes.remove(node.getNodeID());   
用户回答回答于

remove()按预期工作。例如,给定这个程序:

import java.util.HashMap;


public class HashMapExample {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();

        map.put("a", 1);
        map.put("b", 2);

        System.out.println("Before removal");
        for( String s : map.keySet() ) {
            System.out.println( s );
        }

        System.out.println("\n\nAfter removal");

        map.remove("a");
        for( String s : map.keySet() ) {
            System.out.println( s );
        }
    }
}

这将输出以下内容:

Before removal
b
a


After removal
b

我能想到的唯一出错的是,你试图在开始时删除的节点对象与你从迭代器获得的节点对象不是同一个节点对象。也就是说,它们具有相同的“NodeID”,但是是不同的对象。也许值得您检查remove()的返回值。

扫码关注云+社区