1. ホーム
  2. java

[解決済み] Java Hashmap。値からキーを取得する方法は?

2022-03-20 14:23:43

質問

という値がある場合 "foo" であり、かつ HashMap<String> ftw に対して ftw.containsValue("foo") を返します。 true 対応するキーを取得するにはどうすればよいのでしょうか?ハッシュマップをループしなければならないのでしょうか?それを行うための最良の方法は何ですか?

どのように解決するのですか?

を選択した場合 コモンズ・コレクションズ・ライブラリ 標準的なJava Collectionsフレームワークの代わりに、簡単にこれを実現することができます。

BidiMap コレクション・ライブラリのインターフェイスは双方向マップであり、通常のマップのようにキーと値を対応付けるだけでなく、値をキーに対応付けることもでき、双方向のルックアップを行うことができます。ある値に対するキーの取得をサポートするのは getKey() メソッドを使用します。

つまり、キーと値が1対1で対応するデータセットでない限り、二値マップを使用することはできません。


Java Collections APIに依存する場合、マップに値を挿入する時点で、キーと値の1対1の関係を確保する必要があります。これは、言うは易く行うは難しです。

それが確実にできるようになったら entrySet() メソッドを使用して、Mapのエントリ(マッピング)のセットを取得します。を型とする集合を得ると Map.Entry を比較しながら、各項目を反復処理します。 保存値 を期待値と比較し 対応するキー .


による双子地図に対応 ジェネリックス グーグル グアバ とリファクタリングされた コモンズ・コレクション ライブラリ(後者は Apache プロジェクトではありません)。Apache Commons Collectionsのジェネリックサポートの欠落を指摘してくれたEskoに感謝します。ジェネリックでコレクションを使うことで、より保守性の高いコードになります。


以来 バージョン4.0 公式の Apache Commons Collections™ ライブラリでは ジェネリックス .

をご覧ください。 概要 のページで、" org.apache.commons.collections4.bidimap の利用可能な実装の一覧は、" パッケージをご覧ください。 BidiMap , OrderedBidiMap そして SortedBidiMap インタフェースがJavaをサポートするようになりました。 ジェネリックス .