値"foo"
があり、HashMap<String> ftw
がをftw.containsValue("foo")
返すtrue
場合、対応するキーを取得するにはどうすればよいですか?ハッシュマップをループする必要がありますか?それを行う最良の方法は何ですか?
標準のJavaコレクションAPIの代わりにCommonsコレクションライブラリを使用することを選択した場合、これは簡単に実現できます。
コレクションライブラリのBidiMapインターフェースは双方向マップであり、キーを値にマップできます(通常のマップのように)。また、値をキーにマップできるため、双方向でルックアップを実行できます。値のキーの取得は、getKey()メソッドでサポートされています。
ただし、Bidiマップではキーに複数の値をマッピングできないため、データセットにキーと値の1:1マッピングがない限り、Bidimapsを使用することはできません。
更新
JavaコレクションAPIに依存する場合は、値をマップに挿入するときに、キーと値の1対1の関係を確認する必要があります。これは言うより簡単です。
確認できたら、entrySet()メソッドを使用して、マップ内のエントリ(マッピング)のセットを取得します。タイプがMap.Entryであるセットを取得したら、エントリを反復処理し、格納された値を期待値と比較して、対応するキーを取得します。
アップデート#2
ジェネリックを使用したBidiマップのサポートは、Google GuavaとリファクタリングされたCommons-Collectionsライブラリにあります(後者はApacheプロジェクトではありません)。Apache Commons Collectionsに欠けている一般的なサポートを指摘してくれたEskoに感謝します。ジェネリックでコレクションを使用すると、コードの保守が容易になります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加