我想知道如何在键匹配时有效地减去两个映射的值。目前我有2 HashMap<String,Integer>
并且这样做:
for (String key: map1.keySet()){
if (map2.keySet().contains(key)){
//subtract
}
}
有更好的方法吗?
答案 0 :(得分:5)
从理论上讲,除非你能以某种方式比O(n)方法更快地找到两个HashMap
之间的匹配键,否则这个速度和它可以做的一样快。
keySet()
中迭代键 - O(n)
答案 1 :(得分:1)
意识到这是一个老线程但是从谷歌检查番石榴
https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained#Maps
您可以使用Map.difference然后获取共同的条目,仅在左侧,右侧等。
答案 2 :(得分:0)
你考虑过使用Apache Commons Collections吗?
CollectionUtils.subtract( collection1, collection2 );
答案 3 :(得分:0)
我认为除非使用不同的方法和/或不同的数据结构,否则没有更好的方法。例如,您可以创建一个名为ValuePair
的类,该类可以包含(最多)两个值,这两个值表示您当前存储在两个不同地图中的值,但您可以将所有对存储在一个地图中,以及何时它可以“减去”你可以在一组键中迭代。请注意,一对可能不完整,因此不会进行减法。
但这可能是矫枉过正的。