如何正确地将数据添加到Hashmap

时间:2013-05-05 23:32:50

标签: android hashmap

我需要存储我的安卓游戏的名称和分数,经过一整天尝试从共享首选项到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();
    }

所以name是一个字符串,scorefromgame是一个整数,一旦我添加它们,我就使用for循环来检查存储的值。当我回到我的游戏并再次播放并添加另一个名称并将其分数覆盖前一个时,我应该如何向HashMap添加数据?

我的目标是在HashMap中存储五个分数,然后在退出时将名称和分数存储到共享首选项中。我很感激任何建议,因为我知道我做错了,但我无法理解文档。

1 个答案:

答案 0 :(得分: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);
    }
}