java - HashMap 不根据键返回值

标签 java hashmap

我正在尝试使用以我的类 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/

相关文章:

java - org.gradle.api.tasks.testing.junit.JUnitOptions.includeGroups() 适用于参数类型 : (java. lang.String) values: [NoDbTests]

java - 在 JSP 中,context.xml 似乎被破坏错误

java - CHM 没有 ConcurrentModificationException。为什么?

java - 悬停时显示单词含义,可用作 MT 系统的后期编辑工具

android - Kotlin 中的方法 hashMapOf()

java - 为应用程序实现一个通用的观察者模式/监听器

java - 在 try-finally block 中嵌入方法的现有代码 (2)

java - Azure 离线同步本地存储文档

java - 如何分别从 HashMap 获取对象?

java - 将 HashMap<String, object> 放入 jsonobject