2013-05-05 56 views
2

我需要存儲我的android遊戲的名稱和分數,並且在嘗試從共享偏好到SQLite的所有內容後,我現在正在試驗一個HashMap,它似乎正在存儲我的名字和得分,但它總是覆蓋前一個,我基本上一次只能有一個。如何正確地將數據添加到散列圖

這裏被簡化我的代碼給你看我有什麼:

Map<String,Integer> map = new HashMap<String,Integer>(); 
map.put(name, scorefromgame); 

for (String key : map.keySet()) { 
    Toast.makeText(getApplicationContext(),key, Toast.LENGTH_LONG).show(); 
    } 

for (Integer value : map.values()) { 
    Toast.makeText(getApplicationContext(), Integer.toString(value), Toast.LENGTH_LONG).show(); 
    } 

所以名字是一個字符串,scorefromgame是一個整數,有一次我加他們,我用for循環來檢查值存儲。當我回到我的遊戲並再次玩,然後添加另一個名字並將它改爲覆蓋前一個名稱時,我應該如何將數據添加到HashMap?

我的目標是在HashMap中存儲五個分數,然後在退出時存儲共享偏好的名稱和分數。我希望對此有任何建議,因爲我知道我做錯了,但我無法理解文檔。

回答

3

如果需要維護多個值的關鍵,你需要一個映射列出:

Map<String, List<Integer>> values = new HashMap<String, List<Integer>>(); 

這就是所謂的多圖。 Google Collections有一個。

我建議你在自定義類中封裝這些細節。這會讓客戶更容易使用。

public class MultiMap<K, V> { 
    private Map<K, V> multiMap = new HashMap<K, V>(); 

    public void put(K key, V value) { 
     List<V> values = (this.multiMap.containsKey(key) ? this.multiMap.get(key) : new List<V>(); 
     if (value != null) { 
      values.add(value); 
     } 
     this.multiMap.put(key, values); 
    } 

    public List<V> get(K key) { 
     List<V> values = (this.multiMap.get(key) == null) ? new List<V>() : this.multiMap.get(key); 
     return Collections.unmodifiableList(values); 
    } 
} 
+0

我認爲在這個品脫我原諒我的Android功能,看起來像這將是一個很多複雜的代碼只是我需要什麼來實現的,我會研究你的代碼行和進一步試驗,看看是什麼我可以學!謝謝! – deucalion0 2013-05-05 23:39:51

相關問題