Map<String, String> map = new HashMap<String, String>();
map.put("1", "xyz");
map.put("1", "abc");
map.put("1", "cde");
map.put("2", "err");`
`
上記のマップでは、キー 1 に関連付けられたすべての値を取得したいと考えています。期待される出力。
キー:: 1 つの値:: xyz、abc、cde
値の順序は重要ではありません。
Map では、キーは常に である必要がありますunique
。新しい値を既存のキーに関連付けると、既存のエントリの値が上書きされます。
Map#put(K, V)メソッドのインターフェイスを確認する必要がある場合があります。
マップに以前にキーのマッピングが含まれていた場合、古い値は指定された値に置き換えられます。
したがって、あなたの場合、マップは常に"cde"
キーの値として持ちます"1"
。
マルチマップを使用
MultiMap mapValue = new MultiValueMap();
mapValue.put("1", "xyz");
mapValue.put("1", "abc");
mapValue.put("1", "cde");
mapValue.put("2", "err");
System.out.println("Map : " + mapValue);
出力: Map : {2=[err], 1=[xyz, abc, cde]}
マップに重複キーを含めることはできません。
問題の説明を実装したい場合。まず、マルチマップを使用する必要があります
あなたがしていることは間違っています。
マップは重複を許可しません。
したがって 、1 つのキー -----------> 1 つの値
指定された値をこのマップ内の指定されたキーに関連付けます (オプションの操作)。マップに以前にキーのマッピングが含まれていた場合、古い値は指定された値に置き換えられます。(マップ m は、m.containsKey(k) が true を返す場合にのみ、キー k のマッピングを含むと言われます。)
key
それぞれの値を印刷できvalue
ます
Ex:
Map<String, String> map = new HashMap<String, String>();
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
Mapでは、重複したキーを持つことはできません。あなたの場合、キー1の最終値。「cde」はマップに残ります
あなたが期待していることを達成するために、次のようなことをすることができます
Map<String, List<String>> map = new HashMap<>();
List<String> list=new ArrayList<>();
List<String> list1=new ArrayList<>();
list.add("xyz");
list.add("abc");
list.add("cde");
list1.add("err");
map.put("1", list);
map.put("2",list1);
System.out.println(map.get("1"));
このタイプのマップではこれを行うことはできません。マップ内のキーは一意である必要があります。
これを行うには、マップを宣言する必要があります。ここで、キーは文字列ですが、値は文字列のコレクションです。
Map<String,Collection<String>> map = new HashMap<String,Collection<String>>();
それから値をリストするには、これを行うことができます
for(String valueOfKey : map.get("key") {
//print or something else
}
いくつかの値を追加するには、最初にキーが既に保存されていることを確認し、そうでない場合は最初にコレクションを宣言する必要があることに注意してください。
if(map.contains("key") == false) {
map.put(new ArrayList<String>());
}
map.get("key").add("value");
これはよく知られている設計であるため、guava フレームワークとMultimapに興味があるかもしれません。
このクラスの利点は、クラスから値を追加および取得するロジックが既に実装されていることです。
これは不可能です。マップは1 つのキー値を値にマップするため、マップと呼ばれます。複数のキーを同じ値にマップできますが、その逆はできません。
おそらく必要なのは、List<String>
代わりににマップされるマップです。
final Map<String, List<String>> map = new HashMap<>();
if (map.get("1") == null) {
map.put("1", new ArrayList<String>());
}
map.get("1").add("xyz");
// ...
追加用のヘルパー関数が便利かも
public static <K, V> void add(final K key, final V value, final Map<K, List<V>> map)
{
if (map.get(key) == null) {
map.put(key, new ArrayList<V>());
}
map.get(key).add(value);
}
HashMap::put は、キーに関連付けられた古い値をオーバーライドします。各マップ エントリにリストを配置し、適切なリストに新しい値を挿入する必要があります。
HashMap .put(K key, V value) メソッドに関する Java ドキュメントから:
指定された値をこのマップ内の指定されたキーに関連付けます。マップに以前にキーのマッピングが含まれていた場合、古い値が置き換えられます。
だからあなたはそれをすることはできません。
次のようなことができます。
for (String k : map.keySet())
System.out.println(k);
これにより、キーが に出力されますHashMap
が、順序に関する保証はありません。
ハッシュ マップの重複キーを持つことはできません 。HashMap で重複キーが発生するとどうなるかについては、以下の SO を参照してください。