Java
 Computer >> コンピューター >  >> プログラミング >> Java

値を指定してHashMapからキーを取得するJavaプログラムの書き方

本記事では、値を指定してHashMapから対応するキーを取得する方法を解説します。JavaのHashMapとは、Mapインターフェースをハッシュテーブルベースで実装したクラスで、キーと値のペア(エントリー)を管理するコレクションです。通常はキーから値を取り出しますが、逆に値からキーを検索したいというケースも少なくありません。

以下に、今回実装する内容の具体例を示します。

入力例:

入力HashMap: {Java=8, Scala=5, Python=15}
検索する値: 8

期待される出力:

値 8 に対応するキー: Java

アルゴリズム

ステップ1 - 処理を開始する
ステップ2 - 必要な変数を宣言する
ステップ3 - 格納する値を定義する
ステップ4 - StringとIntegerを扱うHashMapを作成し、putメソッドで要素を追加する
ステップ5 - 検索対象となる値を定義する
ステップ6 - entrySet()でHashMapの全エントリーを反復処理し、指定した値を持つエントリーを探す
ステップ7 - 一致するエントリーが見つかったら、breakでループを抜ける
ステップ8 - 見つかったキーを表示する
ステップ9 - 処理を終了する

例1:mainメソッド内にすべて記述するパターン

ここでは、すべての処理をmainメソッドの中にまとめて実装します。

import java.util.HashMap;
import java.util.Map.Entry;

public class Demo {
   public static void main(String[] args) {
      System.out.println("必要なパッケージをインポートしました");
      HashMap<String, Integer> input_map = new HashMap<>();
      input_map.put("Scala", 5);
      input_map.put("Java", 8);
      input_map.put("Python", 15);
      System.out.println("HashMapの内容: " + input_map);
      Integer key = 8;
      for(Entry<String, Integer> entry : input_map.entrySet()) {
         if(entry.getValue().equals(key)) {
            System.out.println("\n値 " + key + " に対応するキーは " + entry.getKey() + " です");
            break;
         }
      }
   }
}

実行結果

必要なパッケージをインポートしました
HashMapの内容: {Java=8, Scala=5, Python=15}

値 8 に対応するキーは Java です

例2:オブジェクト指向スタイルでメソッドに分離するパターン

続いて、検索処理を独立したメソッドとして切り出し、オブジェクト指向プログラミングらしい構造に整理します。

import java.util.HashMap;
import java.util.Map.Entry;

public class Demo {
   static void getKeyByValue(HashMap<String, Integer> input_map, Integer key){
      for(Entry<String, Integer> entry : input_map.entrySet()) {
         if(entry.getValue().equals(key)) {
            System.out.println("\n値 " + key + " に対応するキーは " + entry.getKey() + " です");
            break;
         }
      }
   }
   public static void main(String[] args) {
      System.out.println("必要なパッケージをインポートしました");
      HashMap<String, Integer> input_map = new HashMap<>();
      input_map.put("Scala", 5);
      input_map.put("Java", 8);
      input_map.put("Python", 15);
      System.out.println("HashMapの内容: " + input_map);
      Integer key = 8;
      getKeyByValue(input_map, key);
   }
}

実行結果

必要なパッケージをインポートしました
HashMapの内容: {Java=8, Scala=5, Python=15}

値 8 に対応するキーは Java です

補足:Integer同士の比較にはequals()を使う

ラッパークラスであるIntegerを「==」演算子で比較すると、-128〜127の範囲内の値はキャッシュされるため動作しますが、範囲外の値では意図どおりに判定されないことがあります。安全に比較するためには、上記サンプルのようにequals()メソッドを使用することをおすすめします。

また、HashMapでは異なるキーが同じ値を持つことが許されています。そのため、値からキーを検索する場合は、複数のキーが該当する可能性がある点にも注意しましょう。該当するキーをすべて取得したい場合は、breakせずにループを継続し、条件に一致する要素をすべて収集するように実装します。

  1. Javaでフォルダ内のディレクトリ(フォルダ)のみを取得する方法

    Javaで特定のフォルダに含まれるファイルではなく、ディレクトリ(サブフォルダ)だけを取得したいケースはよくあります。本記事では、代表的な2つの方法——FileFilterインターフェースを使う方法と、NIOのFiles.walk()を使う方法——をサンプルコード付きで解説します。listFiles()メソッドとFileFilterの基本FileクラスのlistFiles()メソッドは、そのFileオブジェクトが表すパスに含まれるすべてのファイルおよびディレクトリの抽象パス名を、配列として返します。ここで活躍するのがFileFilterインターフェースです。FileFilterはパス名をフィル

  2. JavaでJsonPointerインターフェースを使用してJSONのキーの値を取得する方法

    JSONPointerは、JSONドキュメント内の特定のキーの値へアクセスするための文字列構文を定義した標準規格です。Jsonクラスの静的ファクトリメソッドであるcreatePointer()を呼び出すことで、JSONPointerのインスタンスを生成できます。JSONPointerでは、すべての文字列構文がスラッシュ「/」で始まるのが特徴です。キーの値を取得するには、JSONPointerオブジェクトに対してgetValue()メソッドを呼び出します。 前提条件 この記事のコードを実行するには、Java EE / Jakarta EEに含まれるJSON Processing(JSON-P)の