当前位置: 首页 > 知识库问答 >
问题:

HashMap不返回基于键的值

曹子平
2023-03-14

我正在尝试使用一个以我的类单元格为键的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,因为根据映射,docs containsKey使用.equals()。我做错了什么?

共有1个答案

楚俊迈
2023-03-14

这很可能是因为您没有实现equals()hashcode()。在Java中,经验法则是,如果实现一个,就必须实现另一个。在您的示例中,它是强制性的,因为hashmap使用了它们。

您创建了具有两个独立地址的两个独立对象。没有这些方法,JVM就无法知道这些对象是“相同的”。

参见http://docs.oracle.com/javase/7/docs/api/java/lang/object.html#hashcode()

 类似资料:
  • 我有一个带有键的HashMap,值是字符串。我想通过以字符串“locationid”开头的键值过滤HashMap,并将键中的值返回到字符串数组列表中。HashMap的填充方式如下: 我需要arraylist中的ORG_Id值。 我找不到可以将值放入字符串列表的位置。编译错误是它不识别values()方法。 更新还尝试将筛选后的Hashmap放入另一个Hashmap中,如下所示: 但得到的编译错误是

  • 问题内容: 我在Java中具有以下哈希图: 我应该如何对哈希图进行排序,以便考虑字母和数字? 生成的哈希图应如下所示: 感谢帮助! 问题答案: 使用排序: 它将自动放置按键排序的条目。我认为自然排序适合你的情况。 注意,由于查找优化,不会保留顺序。

  • 问题内容: 是否有可能为集合中未找到的所有键返回默认值? 问题答案: [更新] 正如其他答案和评论者所指出的那样,从Java 8开始,您可以简单地调用。 [原版的] 没有Map实现可以完全做到这一点,但是通过扩展HashMap来实现自己的实现很简单:

  • 我已经创建了一个方法,它接受一个hashmap作为输入,将值转换成一个数组,使用气泡排序对数组进行排序,然后我希望它使用排序后的值从初始hashmap中选择前N个索引键。我知道这不是最好的方法,但这是好的(我写了这个方法作为一个替代)。 该方法返回null,因为maxItems为空,并且“System.out.println(Entry.GetKey());”不会将任何内容打印到控制台。 谢谢你的

  • 问题内容: Java是否有(或有可用的库)允许我拥有基于磁盘的HashMap?它不需要是原子的或任何东西,但是它将通过多个线程进行访问,并且如果两个线程同时访问同一个元素,则不会崩溃。 有人知道吗? 问题答案: 无论是属性文件或Berkeley DB的 可能是你在找什么。在自身实现,并提供了一些方法来从和到一个文件中。通常建议将Berkeley DB作为轻量级键/值对数据存储。

  • 我正在Worklight中使用一个基于Java的适配器。我有一个返回字符串值的方法。我可以调用该函数,结果将被送到适配器中的成功处理程序,但我无法找到关于返回值的任何信息。我在响应JSON中的任何地方都看不到返回的字符串。有谁能帮我一下吗? 下面是我的响应JSON: {“Status”:200,“InvocationContext”:Null,“InvocationResult”:{“Respon