-6
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

値の順序は重要ではありません。

4

11 に答える 11

7

Map では、キーは常に である必要がありますunique。新しい値を既存のキーに関連付けると、既存のエントリの値が上書きされます。

Map#put(K, V)メソッドのインターフェイスを確認する必要がある場合があります。

マップに以前にキーのマッピングが含まれていた場合、古い値は指定された値に置き換えられます。

したがって、あなたの場合、マップは常に"cde"キーの値として持ちます"1"

于 2013-07-25T10:05:29.310 に答える
6

マルチマップを使用

    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]}

于 2013-07-25T10:10:46.277 に答える
4

マップに重複キーを含めることはできません。

問題の説明を実装したい場合。まず、マルチマップを使用する必要があります

于 2013-07-25T10:08:02.543 に答える
1

あなたがしていることは間違っています。

マップは重複を許可しません。

したがって 、1 つのキー -----------> 1 つの値

put() のドキュメントが表示された場合

指定された値をこのマップ内の指定されたキーに関連付けます (オプションの操作)。マップに以前にキーのマッピングが含まれていた場合、古い値は指定された値に置き換えられます。(マップ 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());
}
于 2013-07-25T10:08:25.197 に答える
0

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"));
于 2013-07-25T10:06:54.887 に答える
0

このタイプのマップではこれを行うことはできません。マップ内のキーは一意である必要があります。

これを行うには、マップを宣言する必要があります。ここで、キーは文字列ですが、値は文字列のコレクションです。

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に興味があるかもしれません。

このクラスの利点は、クラスから値を追加および取得するロジックが既に実装されていることです。

于 2013-07-25T10:07:41.293 に答える
0

これは不可能です。マップは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);
}
于 2013-07-25T10:06:27.360 に答える
0

HashMap::put は、キーに関連付けられた古い値をオーバーライドします。各マップ エントリにリストを配置し、適切なリストに新しい値を挿入する必要があります。

于 2013-07-25T10:09:31.483 に答える
0

HashMap .put(K key, V value) メソッドに関する Java ドキュメントから:

指定された値をこのマップ内の指定されたキーに関連付けます。マップに以前にキーのマッピングが含まれていた場合、古い値が置き換えられます。

だからあなたはそれをすることはできません。

于 2013-07-25T10:11:07.893 に答える
0

次のようなことができます。

for (String k : map.keySet())
    System.out.println(k);

これにより、キーが に出力されますHashMapが、順序に関する保証はありません。

于 2018-04-11T01:17:06.197 に答える
-1

ハッシュ マップの重複キーを持つことはできません 。HashMap で重複キーが発生するとどうなるかについては、以下の SO を参照してください。

于 2013-07-25T10:07:43.673 に答える