2013-05-05 74 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

相关问题