从键中迭代LinkedHashMap值

时间:2013-12-20 18:00:15

标签: java loops hashmap

我正在努力处理一些代码,而我无法弄清楚正确的语法是什么。以下是问题的一个示例:

for (Integer key : map1.keySet()) {

    for (Integer value : map2.values()) {

        if (value == key) {

            // ++ the corresponding value of the looping map1 key.
            // tried statements like map1.values()++  
            // but this is an invalid operation.

        }
    }
}

我正在尝试通过map1值循环map2密钥,如果在此过程中map1键与map2值匹配,我想在值中添加一个相应的map1密钥。

应该是一个简单的问题,但Eclipse一直告诉我,我的语法有误,有人可以建议我可能需要迭代这些值吗?

4 个答案:

答案 0 :(得分:2)

通过对代码进行非常小的修改,您可以通过以下方式完成此操作:

for (Map.Entry<Integer,Integer> entry : map1.entrySet()) {
    for (Integer value : map2.values()) {
        if (value.equals(entry.getKey())) {
            entry.setValue(entry.getValue()+1);
        }
    }
}

编辑:由于map2可能会多次包含相同的,因此使用哈希集来加快速度的其他解决方案将无效预期

答案 1 :(得分:0)

我不确定为什么Eclipse会报告语法错误,但无论如何这个循环都没有多大意义,请考虑将其更改为:

for (Integer value : map2.values())
    if (map1.containsKey(value))
        // bla bla

它将以O(n)而不是前O(n * m)

运行

当n是map2的大小而m是map1的大小时(由@dasblinkenlight通知)

答案 2 :(得分:0)

你如何创建你的地图?像Map<Integer, Integer> map1=new LinkedHashMap<Integer, Integer>();Map map1=new LinkedHashMap();如果第二种方式键是Object not Integer。并且在所有情况下使用==不良做法比较两个整数。使用等于

答案 3 :(得分:0)

您可以使用containsKey这样的方法:

for (Integer value : map2.values()){
if (map1.containsKey(value))
    map1.put(key, value);

...
}