当前位置: 首页 > 面试题库 >

如何使用自定义键类型使HashMap正常工作?

白云
2023-03-14
问题内容

我认为我的问题很简单,但是我找不到解决方案,所以我决定在这里提问。我需要做的是HashMap使用这样的自定义键类型:

HashMap<Pair<Integer, Integer>, StrategyPoint> myMap = new HashMap<Pair<Integer, Integer>, StrategyPoint> ();

但是,我在这里丢失了一些东西,因为HashMap停止功能正常。首先,密钥不是唯一的,并且可以在中找到具有相同值的Pair的不同实例keySet。同样,包含键功能不能像我想象的那样起作用:)。

我显然错过了一些东西,并且更有可能应该以某种方式定义一种比较Pair类中实例的方法。但是我compareToPair课堂上尝试实现Comparable
with ,但仍然无法正常工作。有什么建议?

我的原始代码有点混乱并且不友好阅读,因此我举了一个例子只是为了说明我的问题。

这是代码:

HashMap<Pair<Integer, Integer>, StrategyPoint> myMap = new HashMap<Pair<Integer, Integer>, StrategyPoint> ();
    Pair<Integer, Integer> myPair = new Pair<Integer, Integer>(2,2);
    StrategyPoint myPoint= new StrategyPoint(2, 2, 5, 5, false);
    myMap.put(myPair, myPoint);


    Pair<Integer, Integer> searcher = new Pair<Integer, Integer> (0,0);
    searcher.setFirst(2);
    searcher.setSecond(2);
    System.out.println(myMap.containsKey(searcher));
    System.out.println(myMap.containsKey(myPair));

执行的结果是:

false

true

我已经调试了它,并且正在正确填充搜索器实例,但是似乎HashMap拒绝在中找到它keySet


问题答案:

你必须正确地实现equalshashCodePair类。

HashMap使用这些方法来区分和散列的关键类。



 类似资料:
  • 问题内容: 我是我的代码,我向ExecutorService提交了一些任务,然后使用shutdown()和awaitTermination()等待它们完成。但是,如果任何一项任务花费的时间超过某个时间段,我希望取消它而不影响其他任务。我使用来自ExecutorService的代码修改代码,该代码在超时后中断任务,如下所示: 一个测试用例,用于说明何时有时间完成任务以及何时它们都不工作 并且在我的代

  • 我是我的代码,我向ExecutorService提交一些任务,然后使用shutdown()和awaitTermination()等待它们完成。但是,如果任何一个任务需要超过一个特定的时间来完成,我希望它被取消,而不影响其他任务。我使用来自ExecutorService的代码修正代码,该代码在超时后中断任务,如下所示: 以及任务何时有时间完成和何时不能同时工作的测试案例 并且在我的代码中似乎起作用:

  • 我想为我的应用程序使用自定义异常处理程序。但是,它不能正常工作。 ApplicationExceptionHandler.java authFilterRegistration.java ErrorEntity.java 使用这些代码,我希望有一个像这样的异常错误 这是的实例,但我得到了以下输出 从示例中可以清楚地看出,我无法完全覆盖默认的Java异常。仅更改成功的消息部分。我错过什么了吗?

  • 问题内容: 我想将非spring bean类对象用作球衣Web服务类方法的参数。但是它在构建时会给出缺少的依赖项错误。 我的代码是: 问题答案: 关键是路径参数以字符串形式出现。根据规范,如果我们希望将自定义类型作为注入,则自定义类应具有以下三项之一: 返回类型的公共静态 返回类型的公共静态 或接受字符串的公共构造函数 另一种选择实现。您可以在此处查看示例。 如果您不拥有该类(它是无法更改的第三方

  • 我想对自定义JFX组件进行子类化,以更改/扩展它们的行为。作为一个真实的例子,我想扩展一个具有编辑功能的data viewer组件。 考虑下面非常小的场景。使用类非常有效。但是当实例化子类(在FXML文件中)时,不再注入字段 会自动调用该方法。 我知道将超级组件嵌套在子组件中应该可以很好地工作,但是我仍然想知道使用继承是否可以做到这一点。 将的可见性扩大到显然无法解决此问题。在中结合定义扩展点(此

  • 我是新来Java。我正在写一个二维游戏,我决定使用哈希地图来存储我的地图数据,因为我需要支持我的地图坐标的负索引。这是因为地图的大小可以在游戏过程中增长。 我编写了一个自定义Pair类,用于存储最终的x和y值。我使用这个Pair对象作为我的HashMap的密钥。我的值是自定义Cell类的实例。 我已经声明我的HashMap如下: