我正在努力处理一些代码,而我无法弄清楚正确的语法是什么。以下是问题的一个示例:
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一直告诉我,我的语法有误,有人可以建议我可能需要迭代这些值吗?
答案 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);
...
}