簡體   English   中英

通過鍵減去兩個HashMap中的值的有效方法

[英]Efficient way to subtract values in two HashMaps by key

我想知道當鍵匹配時如何有效地減去兩個映射的值。 目前,我有2個HashMap<String,Integer> ,它是這樣的:

for (String key: map1.keySet()){
   if (map2.keySet().contains(key)){
       //subtract
   }
}

有更好的方法嗎?

從理論上講,這大約可以完成,除非您可以以某種比O(n)更快的方式找到兩個HashMap之間的匹配鍵。

  • 遍歷第一個地圖的keySet() -O(n)中的鍵
    • 查看鍵是否在其他地圖中-O(1)
    • 做你的手術-O(1)

意識到這是一個舊線程,但是請從Google簽出番石榴

https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained#Maps

您可以使用Map.difference,然后僅在左,右等位置獲取公共條目。

您是否考慮過使用Apache Commons Collections?

CollectionUtils.subtract( collection1, collection2 );

我認為沒有更好的方法, 除非您使用其他方法和/或不同的數據結構。 例如,您可以創建一個名為ValuePair的類,該類可以包含(最多)兩個值,這些值表示您當前存儲在兩個不同映射中的值,但是您可以將所有對存儲在一個映射中,當涉及到“您可以在一組鍵中進行“減去”。 請注意,一對可能是不完整的,因此不會進行任何減法。

但這可能是過大的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM