2012-04-25 11 views
1

マップ内のキーに複数の値を指定しようとしています。私はこの種のものが働くことを望んでいました.. mapp.put( "key1"、 "value1") mapp.put( "key1"、 "value2")。 最初の値 "value1"が "value2"でオーバーライドされています。両方の値を保持する方法?私はこのことが起こるためにマップ以外のものに行くべきでしょうか?コレクションを使用する - マップ

答えて

1

リストでマップを解除することができます。そのような何か:置くkey1については

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

最初の値を持つ:

if (!map.containsKey("key1")) { 
    map.put("key1", new LinkedList<String>()); 
} 
map.get("key1").add("value1"); 

についてはkey1

map.get("key1").add("value2"); 

に第2の値を追加するには、1つの方法では、このすべてを持つことができます

public void add(String key, String value) { 
    if (!map.containsKey(key)) { 
     map.put(key, new LinkedList<String>()); 
    } 
    map.put(key, value); 
} 

あなたがkey1の値が必要な場合、あなたはList

List<String> values = map.get("key1"); 
2

両方のvalyesを別のコレクション(Vector、Set、Stackなど)に入れ、マップに値としてハットコレクションを格納します。ベクターを使用してランダムな例として

Vector<Object> myVector = new Vector<Object>(); 
myVector.add("value1"); 
myVector.add("value2"); 
mapp.put("key1", myVector); 
+0

を得るには...これを試し、それが仕事をした.. thankq .. :) – maryJane

0

また

A map cannot contain duplicate keys; each key can map to at most one value.

あなたが MapのJavadocのから、その行動

1

でマップしたい場合は、Multimapはチェックアウト

したがって、単一キーに複数の値を設定する場合は、値をリストに追加し、key1とlistをマップに配置します。

1
HashMap<K, HashSet<V>> map = new HashMap<K, HashSet<V>>(); 
if(!map.containsKey(k)) { 
    map.put(k, new HashSet<V>()); 
} 
map.get(k).add(v); 

重複する値がある場合は、ハッシュセットの代わりにlist/vectorを使用してください。

関連する問題