有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用一对(x,y)作为键在HashMap上迭代

我有一个HashMap:

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

我已经举例说明了

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

Pair是我创建的一个自定义Pair类,它已被覆盖。等于和。hashMap以避免重复键

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

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

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

谢谢


共 (2) 个答案

  1. # 1 楼答案

    也没什么不同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的实现一样独特

  2. # 2 楼答案

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