在Entry Map中的所有元素中,我只能删除至少位置的一个元素。谁能解释一下是什么原因?
Ps:我认为在EntryMap中使用HashMap存在问题
这是完整的代码:
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
public class Neti {
static Map<Integer, String> mm = new HashMap<>();
static void removeEntry(Integer val) {
for (Entry<Integer, String> entry : mm.entrySet()) {
if (entry.getKey() == val) {
mm.remove(val);
break;
}
}
}
public static void main(String[] args) {
mm.put(123, "one");
mm.put(1234, "two");
mm.put(12345, "three");
mm.put(123456, "four");
Scanner scanner = new Scanner(System.in);
System.out.println("We have: " + mm);
for (;;) {
System.out.print("Number to remove: ");
int val = scanner.nextInt();
removeEntry(val);
System.out.println("Map entries are: " + mm.toString());
}
}
}
答案 0 :(得分:3)
您的整个removeEntry
方法可以替换为单个语句 - mm.remove(val)
。没有必要迭代entrySet
来找到您想要删除的密钥,即使有,使用==
作为参考类型通常也是错误的。