我正在尝试使用以我的类 Cell 作为键的 HashMap。但是,将一个项目放入 HashMap 后,对该项目调用 contains 将返回 false。
public static void main(String args[]) {
HashMap<Cell, String> map = new HashMap<Cell, String>();
map.put(new Cell(0,0), "Bob");
System.out.println(map.containsKey(new Cell(0,0)));
System.out.println(new Cell(0,0).equals(new Cell(0,0)));
}
这会打印出 false 和 true,而它应该打印 true 和 true,因为根据 Map 文档 containsKey 使用 .equals()。我做错了什么?
最佳答案
这很可能是因为您没有实现 equals()
和 hashCode()
。在 Java 中,经验法则是,如果实现一个,则必须实现另一个。在您的情况下,这是强制性的,因为 HashMap
使用它们。
您创建了两个具有两个单独地址的单独对象。如果没有这些方法,JVM 就无法知道这些对象是“相同的”。
参见http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()
关于java - HashMap 不根据键返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19166850/