2

Android ゲームの名前とスコアを保存する必要があり、共有設定から SQLite まですべてを 1 日試した後、名前とスコアを保存しているように見える HashMap を試していますが、常に以前の1つ、基本的に一度に1つしか持てません。

私が持っているものを示すために簡略化したコードを次に示します。

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 に 5 つのスコアを保存し、終了時に名前とスコアを共有設定に保存することです。私はこれが間違っていることを知っているので、これに関するアドバイスをいただければ幸いですが、ドキュメントを理解することはできません。

4

1 に答える 1

3

キーの複数の値を維持する必要がある場合は、リストのマップが必要になります。

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

これをマルチマップと呼びます。Google コレクションには 1 つがあります。

カスタム クラス内でこれがどのように行われるかの詳細をカプセル化することをお勧めします。クライアントが使いやすくなります。

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);
    }
}
于 2013-05-05T23:37:58.007 に答える