5

Javaでハッシュマップデータ構造を扱っています。各エントリ(値)にグループ(キー)があるデータがあります。今、私はこのデータを次のようにハッシュマップに保存しています

HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "value1");
map.put(1, "value2");
map.put(2, "value3");
map.put(2, "value4");
map.put(3, "value5");
map.put(3, "value6");
map.put(3, "value7");

エントリ(キー= 3および値= "値6")がマップに存在するかどうかを検索したい。呼び出す特定のメソッドはありますか?またはそれを行う他の方法はありますか?

4

7 に答える 7

9

マップ内の同じキーに対して複数のエントリを保持することはできません。マップにキーのマッピングが以前に含まれていた場合、古い値は置き換えられます。あなたが必要

Map<Integer,List<String>> map = new HashMap<>();
                                          ^^^^^
                                     (Diamond operator)

同じキーに対して文字列のリストを保存できる場所。そして、あなたは値を得ることができますmap#get

List<String> str = map.get(3);
于 2013-06-25T04:55:00.377 に答える
5

Guava Multimap ( API docs )を利用できます

1 つのキーに対して複数の値を格納します。あなたの場合、

Multimap<Integer,String> myMultimap = ArrayListMultimap.create();
myMultimap .put(1, "value1");
myMultimap .put(1, "value2");
myMultimap .put(2, "value3");
myMultimap .put(2, "value4");
myMultimap .put(3, "value5");
myMultimap .put(3, "value6");
myMultimap .put(3, "value7");

これにより、データ構造が作成されます

エントリ(キー= 3および値= "値6")がマップに存在するかどうかを検索したい。呼び出す特定のメソッドはありますか?またはそれを行う他の方法はありますか?

検索には、結果に基づいて結果を返すmultimap#containsEntry(key,value)を使用しますboolean

したがって、

myMultimap.containsEntry(3,"value6")

戻りますtrue

于 2013-06-25T05:12:04.647 に答える
1

マップは一意のキーのみを格納し、3 をキーとして格納し、value6 を値として格納し、次に 3 をキーとして格納し、value7 を値として格納すると、マップはキーとして 3 のみを格納し、value6 は値として value7 を格納します。

于 2013-06-25T04:56:41.733 に答える
1

目的のキーの値を取得し、それを値と比較することで、キー ペアの値が存在するかどうかを知ることができます。

例 (Java 7 以降):

boolean exists(Map<K,V> map, K key, V value)
{
  return map!=null && map.get(key)!=null && Objects.equals(map.get(key),value);
}

boolean existsinList(Map<K,V> map, K key, V value)
{
  return map!=null && map.get(key)!=null && map.get(key).contains(value);
}

必要なすべてのチェックが含まれています。条件 (例: map!=null) を分析して削除または変更して、ユースケースに合わせて物事を適合させたり、この関数を任意の制御構造に適合できる単一の条件に変換したりできます (必要な場合)。

于 2020-05-04T16:02:23.177 に答える