使用Pair(x,y)作为键迭代HashMap

时间:2015-04-22 01:44:38

标签: java iterator hashmap

我有一个HashMap:

resources = new HashMap<Pair, Resource>();

我已经实例化了......

resources.put(new Pair(x,y), new Resource());

Pair是我创建的自定义Pair类,它重写了.equals和.hashMap以避免重复键。

我想迭代资源,以便识别我创建的唯一实例。更具体地说,我需要识别唯一的(x,y)对。

我已经找到了迭代HashMaps的解决方案,但是我对如何调整它(如下所示)以使用对的密钥感到有点困惑。

for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + "/" + entry.getValue());
}

谢谢!

2 个答案:

答案 0 :(得分:0)

没有什么不同。 MapMap.Entry是通用的,因此您在构建地图时指定参数化类型。

Map<Pair, String> keyToValue = new HashMap<>();
// put stuff in it
for (Map.Entry<Pair, String> entry: keyToValue.entrySet()) {
    Pair pair = entry.getKey();
    String value = entry.getValue();
    // do stuff
}

事实上,您的Pair课程本身可能会变得一致 - Pair<T,U>

至于获取唯一对,您可以Set<Pair> uniquePairs = keyToValue.keySet()或者,如果您根本不需要相应的值,则可以使用HashSet - Set<Pair> uniquePairs = new HashSet<>()。它们将与Pair.hashPair.equals的实现一样独特。

答案 1 :(得分:0)

首先,我认为你的意思是你已经在Pair类中重写了equals()和hashCode()方法吗? 你如何定义唯一的对?我希望你的唯一性定义不是基于equals(),因为如果是这样的话,那么HashMap的所有键都是唯一的