从LinkedHashMap的实例中删除其中一个键值后,无法打印出其余的键值

时间:2016-03-18 02:18:44

标签: java dictionary iterator

我有一个LinkedHashMap的实例,使用if-else语句,我想从LinkedHashMap中删除一个键值并打印出其余的。但是,IDE不是打印出其余的键,而是打印出许多我不理解的信息。有人可以帮帮我吗?在此先感谢您的帮助!

Map<String, Integer> msi1 = new LinkedHashMap<>();

msi1.put("hello", 1);
msi1.put("world", 2);
msi1.put("morning", 3);

for (Iterator<String> it = msi1.keySet().iterator(); it.hasNext();) {
    if (it.next().equals("world")) {
        it.remove();
    } else {
        System.out.println(it);
    }
}

java.util.LinkedHashMap$LinkedKeyIterator@15db9742
java.util.LinkedHashMap$LinkedKeyIterator@15db9742

1 个答案:

答案 0 :(得分:3)

如果您打算在迭代时从Map中删除元素,那么使用迭代器是正确的。但是,您试图直接打印出迭代器对象,这没有意义。在下面的代码片段中,我改为打印出不匹配条目的键和值。

Map<String, Integer> msi1 = new LinkedHashMap<>();

msi1.put("hello", 1);
msi1.put("world", 2);
msi1.put("morning", 3);

Iterator<Map.Entry<String, Integer>> it = msi1.entrySet().iterator();

while (it.hasNext()) {
    Map.Entry<String, Integer> entry = it.next();
    if (entry.getKey().equals("world")) {
        it.remove();
    }
    else {
        System.out.println("Found entry: " + entry.getKey() + " -> " + entry.getValue());
    }
}