2012-10-20 13 views
2

有沒有辦法,我們可以按鍵和一個HashMap中的Java的HashMap組

HashMap<String, Integer> map = new HashMap<String, Integer>(); 

    map.put("A", 2); 
    map.put("A", 3); 
    map.put("B", 4); 
    map.put("A", 5); 
    map.put("B", 4);  
添加值

結果是

A = 10 
    B = 8 

任何幫助將是有益的! !

+6

而如果它這樣做把檢查元素存在然後添加並放置。 –

+0

請解釋一下你想要的輸出。 –

+0

是的,使用if語句和'map.containsKey'方法。你能行的。 – goat

回答

3

書寫工具方法

private static class MutableValue { 
    double value; 
    public MutableValue(double value) { 
     this.value = value; 
    } 
    public void add(double value) { 
     this.value += value; 
    } 
} 

MutableValue value = sourceNameMap.get(ticketId); 
if (oldValue == null) { 
    sourceNameMap.put(new MutableValue(entryValue)); 
} else { 
    value.add(entryValue); 
} 
+0

+1這就是方法。 –

+0

如果你想訪問所有的值,可能是下一次乘法 – Jayy

+0

@KaipaMSarma然後你的解決方案更好。但是,這似乎並不是OP的問題。 –

2

您可以將這種方式

HashMap<String, ArrayList<Integer>> 

每當你看到A不斷增加的值到它的ArrayList中

+1

這需要O(n)時間來檢索總和。 –

3

你不應該使用HashMap。

map.put("A", 2); 
map.put("A", 3); 

第二個覆蓋第一個放。使用一個列表。循環播放並自己添加。

5

像這樣的東西應該工作:

Map<String, Integer> map = new HashMap<>(); 
......... 
public void putAndIncrement(String key, int value) { 
    Integer prev = map.get(key); 
    Integer newValue = value; 
    if (prev != null) { 
     newValue += prev.intValue(); 
    } 
    map.put(newValue); 
} 
0

查看答案上Java algorithm to track parts of aggregated values

,這是否
public void incrementValue(HashMap<String, Integer> map, String key, int value) { 
    Integer old = map.get(key); 
    if (old == null) { 
     map.put(key, value); 
    } else { 
     map.put(key, value + old); 
    } 
}