2

HashMapのキーに対応する複数の値を保持することは可能ですか?はいの場合、どのように?

4

6 に答える 6

11

はい、これは連鎖と呼ばれます。特にチェーンのサイズが大きくなり始めた場合は、できるだけチェーンを避けたいと思うでしょう。目標は可能な限り O(1) に近づけることであるため、より長いチェーン サイズはハッシュ構造を使用する目的全体に反します。

Map<String, List<String>> hm = new HashMap<String, List<String>>();
List<String> values = new ArrayList<String>();
values.add("Value 1");
values.add("Value 2");
hm.put("Key1", values);
于 2012-09-21T19:13:05.913 に答える
9

Guava ライブラリ(以前の Google コレクション)を試すことができます。単一のキーに対して複数の値を格納できるマルチマップの実装があります。

たとえば、ListMultimap の実装では、キーと値のペアの複製が許可され、挿入順に保持されます。

使用方法は次のとおりです。

ListMultimap<String, Integer> numberClasses = ArrayListMultimap.create();
numberClasses.put("odd", 1);
numberClasses.put("odd", 3);
numberClasses.put("odd", 5);

numberClasses.put("even", 2);
numberClasses.put("even", 4);
numberClasses.put("even", 6);

assertEquals(Arrays.asList(1,3,5), numberClasses.get("odd"));
assertEquals(Arrays.asList(2,4,6), numberClasses.get("even"));

もう 1 つのクールな例はSetMultimap です。これは、キーの値がセットに保持されることを除いて、ListMultimap と非常によく似ています。(ユーザーの観点からは、それがどのように実装されているか正確にはわかりません。)

SetMultimap<String, Integer> setMultimap= HashMultimap.create();
setMultimap.put("key1", 1);
setMultimap.put("key1", 1);
setMultimap.put("key1", 1);
setMultimap.put("key1", 2);

setMultimap.put("key2", 1);
setMultimap.put("key2", 3);

assertEquals(ImmutableSet.of(1,2), setMultimap.get("key1"));
assertEquals(ImmutableSet.of(1,3), setMultimap.get("key2"));
于 2012-09-21T19:14:40.563 に答える
1

を使用しMap<String, List<String>>ます。

于 2012-09-21T19:06:51.460 に答える
0

厳密に言えば、いいえ。

しかし!何らかの値として、Collectionそれを使用して、必要な数の値を格納できます。

于 2012-09-21T19:07:11.653 に答える
0

Without using any other Libary Create a map with Key as String and value as HashSet value will be not repeated string.


multivaleMap.computeIfAbsent("key", k -> new HashSet<String>()).add("value1");
multivaleMap.computeIfAbsent("key", k -> new HashSet<String>()).add("value2");

System.out.println(multivaleMap);``` will print {key=[value2, value1]}
于 2020-07-20T20:33:34.427 に答える
0

はい。ただし、格納されている値の型がMap配列またはリストの場合のみ:

Map<String, List<String>> myMap

また

Map<String, String[]> myMap

しかし、汎用データ構造内に汎用データ構造を構築することは一般的に悪い習慣です。

をラップするドメイン固有のクラスをHashMap作成して、値の存在やキーごとの項目数などを簡単に確認できないようにするにはどうすればよいでしょうか?

于 2012-09-21T19:08:56.297 に答える