我觉得我的问题很简单,但是我找不到解决方案所以我决定在这里问。我需要的是用这样的自定义键类型制作一个 HashMap
:
HashMap<Pair<Integer, Integer>, StrategyPoint> myMap = new HashMap<Pair<Integer, Integer>, StrategyPoint> ();
但是我在这里遗漏了一些东西,因为 HashMap
停止正常工作。首先,Key 变得不唯一,并且可以在 keySet
中找到具有相同值的 Pair 的不同实例。此外,包含键功能并不像我想的那样工作:)。
我显然遗漏了一些东西,更有可能我应该以某种方式定义一种方法来比较我的实例与我的 Pair
类。但是,我尝试在我的 Pair
类中使用 compareTo
实现 Comparable,但它仍然不起作用。有什么建议吗?
我的原始代码有点乱,不利于阅读,所以我在这里举了一个例子来说明我的问题。
代码如下:
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
中找到它。
最佳答案
您必须在 Pair
类上正确实现 equals
和 hashCode
。
HashMap
使用这些方法来区分和哈希键类。
关于java - 如何使 HashMap 与自定义键类型一起正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15039222/