1

にいくつかの値を入れたいですmap<String,String>。しかし、等しいキーでデータをシフトしたくありません。 例:

map.put("foo","some");
map.put("bar","thing");
map.put("foo","new");

返さなければならないfoo-some,bar-thing,foo-new.

しかし、いいえbar-thing,foo-new

どの種類のマップを使用すればよいですか?

4

2 に答える 2

4

標準ランタイムには含まれていないため、サードパーティのライブラリが必要になります。Google Guava ライブラリは積極的にメンテナンスされており、非常に強力です。

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html

于 2013-08-25T22:15:10.407 に答える
2

複数の整数を単一の文字列キーにマップしようとしていると思います。可能ですが、キーをList. HashMapaまたは aのどちらを選択するTreeMapかは、エントリをキーでソートしたままにするかどうかによって異なります。

並べ替えはあなたが探しているものではないと思います。したがって、 aHashMapで十分です。

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

次に、同じキーに複数の値を追加できます

public void addToMappedList(Map<String, List<Integer>> map,
                                 String key, Integer value) {
    List<Integer> existingValues = map.get(key);
    if (existingValues == null) {
        existingValues = new ArrayList<Integer>();
        map.put(key, existingValues);
    }
    existingValues.add(value);
}

addToMappedList(map, "foo", 1);
addToMappedList(map, "foo", 2);

から個々の値を削除する方法は次のとおりListです。返されるブール値は、 が実際に見つかり、 から削除されたかどうかを示しvalueますList

public boolean removeFromMappedList(Map<String, List<Integer>> map,
                                         String key, Integer value) {
    List<Integer> existingValues = map.get(key);
    if (existingValues != null) {
        return existingValues.remove(value);
    }
    return false;
}

removeFromMappedList(map, "foo", 1); // true
removeFromMappedList(map, "foo", 3); // false

Listキー全体とそれに関連付けられているを削除するには、Map直接

map.remove("foo");
于 2013-08-25T22:14:53.750 に答える