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

Java HashMapクラスの使い方を徹底解説!基本操作から実践例まで

プログラミングにおいて、データ型は特定の種類のデータを分類するために使用されます。データ型ごとに保存方法が異なり、値がどのデータ型で保存されるかによって、その値に対して実行できる操作が決まります。

Javaで開発を行う際によく使われるクラスのひとつが、JavaのHashMapクラスです。このクラスはコレクションフレームワークの一部であり、Mapデータ型を使ってデータを保存することを可能にします。

この記事では、Java HashMapの基礎知識、HashMapの作成方法、そしてHashMapクラスを扱う際に使用できる主なメソッドについて解説します。記事全体を通してサンプルコードを交えながら、HashMapクラスについてより深く説明していきます。

JavaのMapとHashMapとは

JavaのMapインターフェースは、キーと値のペア(key/value)でマップの値を保存するために使用されます。キーは特定の値に関連付けられた一意の値です。Javaでは、マップに重複したキーを含めることはできず、各キーは必ず特定の値と関連付けられている必要があります。

Mapが提供するキー/バリュー構造により、キーを基準に値へアクセスできます。例えば、キーがgbp、値がUnited Kingdomであるマップがある場合、キーgbpを参照すると「United Kingdom」という値が返されます。

HashMapクラスはコレクションフレームワークの一部であり、Mapインターフェースとハッシュテーブルを使用してデータを保存することができます。ハッシュテーブルは、キーと値のアイテムを保存するために使用される特殊なコレクションです。

HashMapを作成する前に、まずHashMapパッケージをインポートする必要があります。Javaプログラムでは以下のように記述します。

import java.util.HashMap;

パッケージをインポートしたら、JavaでHashMapの作成を始められます。

HashMapの作成方法

JavaでHashMapを作成するには、以下の構文を使用します。

HashMap<KeyType, ValueType> map_name = new HashMap<KeyType, ValueType>(capacity, loadFactor);

各要素を分解してみましょう。

  • HashMap: コード内でHashMapを宣言していることを示します。
  • <KeyType, ValueType>: キーと値のデータ型をそれぞれ指定します。
  • map_name: 宣言するHashMapの名前です。
  • new HashMap<KeyType, ValueType>: 指定したデータ型でHashMapを初期化するようコードに指示します。
  • capacity: 保存できるエントリ数を指定します。デフォルトは16です。(省略可能)
  • loadFactor: ハッシュテーブルが一定の容量に達したときに、元のサイズの2倍の新しいハッシュテーブルを作成するタイミングを指定します。デフォルトは0.75(容量の75%)です。(省略可能)

例として、地域の両替業者向けのプログラムを作成するとします。両替サービスを提供している国名と通貨コードを保存するプログラムが必要です。国名と通貨コードという2つの関連する情報を一緒に保存したいので、HashMapを使うのは良い選択と言えます。

この目的でHashMapを作成するコードは以下の通りです。

import java.util.HashMap;
HashMap<String, String> currencyCodes = new HashMap<String, String>();

この例では、2つのString値を保存するcurrencyCodesというHashMapを宣言しました。これでHashMapの準備が整ったので、要素の追加や操作を始められます。

要素の追加

HashMapクラスには、データの保存や操作に使用できるさまざまなメソッドが用意されています。put()メソッドは、キー/バリュー構造を使ってHashMapに値を追加するために使用します。

両替の例に戻りましょう。イギリスの通貨情報を保存するため、GBP/United Kingdomというエントリをプログラムに追加したいとします。この例では、GBPというキーがUnited Kingdomという値にマッピングされます。以下のコードで実現できます。

import java.util.HashMap;

class CurrencyExchange {
    public static void main(String[] args) {
        HashMap<String, String> currencyCodes = new HashMap<String, String>();

        currencyCodes.put("GBP", "United Kingdom");
        currencyCodes.put("USD", "United States");
        System.out.println(currencyCodes);
    }
}

このコードでは、currencyCodesというHashMapを初期化し、put()メソッドを使ってエントリを追加しています。最初のエントリはキーがGBP、値がUnited Kingdomです。その後、HashMapの内容を出力すると、以下の結果が返されます。

{GBP=United Kingdom, USD=United States}

ご覧の通り、HashMapにはGBP=United KingdomUSD=United Statesの2つの値が含まれています。

要素へのアクセス

HashMap内の要素にアクセスするには、get()メソッドを使用します。getメソッドは1つの引数を受け取ります。それは取得したい値のキー名です。

GBPに関連付けられた国名を取得したい場合は、以下のコードを使用します。

...
String gbp = currencyCodes.get("GBP");
System.out.println(gbp);
...

このコードは「United Kingdom」を返します。

要素の削除

remove()メソッドは、HashMapから要素を削除するために使用します。remove()は1つの引数を受け取ります。それは削除したいエントリのキー名です。

HashMapからGBPを削除したい場合は、以下のコードを使用します。

...
currencyCodes.remove("GBP");
System.out.println(currencyCodes);
...

このコードを実行すると、HashMapからGBPが削除され、以下の結果が返されます。

{USD=United States}

また、clear()メソッドを使用すると、HashMapからすべての要素を削除できます。clear()は引数を受け取りません。clear()メソッドの使用例は以下の通りです。

...
currencyCodes.clear();
System.out.println(currencyCodes);
...

このコードは空のHashMap {} を返します。

HashMap要素の置き換え

replace()メソッドは、特定のキーに関連付けられた値を新しい値に置き換えるために使用します。replace()は2つの引数を受け取ります。それは置き換えたい値のキーと、古い値を置き換える新しい値です。

例えば、HashMap内のUnited KingdomGreat Britainに置き換えたい場合は、以下のコードを使用します。

...
currencyCodes.replace("GBP", "Great Britain");
System.out.println(currencyCodes);
...

このコードを実行すると、キーGBPの値(この場合はUnited Kingdom)がGreat Britainに置き換えられ、プログラムは以下の結果を返します。

{GBP=Great Britain, USD=United States}

HashMapの反復処理

さらに、JavaではHashMapを反復処理(ループ)することもできます。HashMapの反復処理に使用できるメソッドは3つあります。

  • keySet(): HashMap内のキーを反復処理します。
  • values(): HashMap内の値を反復処理します。
  • entrySet(): HashMap内のキーと値の両方を反復処理します。

HashMapを反復処理する最も簡単な方法は、for-eachループを使用することです。Javaのfor-eachループについて詳しく知りたい方は、専用のチュートリアルをご覧ください。

currencyCodes HashMap内のすべての値をコンソールに出力し、両替業者に提供している通貨のリストを表示したいとします。以下のコードで実現できます。

import java.util.HashMap;

class CurrencyExchange {
    public static void main(String[] args) {
        HashMap<String, String> currencyCodes = new HashMap<String, String>();

        currencyCodes.put("GBP", "Great Britain");
        currencyCodes.put("USD", "United States");

        for(String value : currencyCodes.values()) {
            System.out.println(value);
        }
    }
}

このコードを実行すると、以下の結果が返されます。

Great Britain
United States

このコードでは、for-eachループを使ってcurrencyCodes.values()のリスト内のすべての項目を反復処理し、各項目を改行して出力しています。

すべてのキーを反復処理してHashMap内の各キー名を出力したい場合は、上記のコードのvalues()keySet()に置き換えます。その場合、プログラムは以下の結果を返します。

GBP
USD

まとめ

JavaのHashMapクラスは、キー/バリューのコレクション構造を使ってデータを保存するために使用されます。この構造は、互いに関連付けるべき2つの値を保存したい場合に特に便利です。

この記事では、HashMapの基礎を解説しました。HashMapの作成方法を紹介し、put()get()remove()replace()など、よく使われるHashMapメソッドの実践例をいくつか見てきました。これで、プロのようにJava HashMapを扱うための知識が身についたはずです!

  1. Javaでサブパッケージを使う方法とは?コンパイルからインポートまで徹底解説

    Javaのサブパッケージとは Javaにおけるサブパッケージは、ファイルシステム上のサブディレクトリとよく似た仕組みです。パッケージを階層的に整理することで、多数のクラスやインターフェースを効率よく管理できるようになります。 例として、com.apple.computers というパッケージに Dell.java というソースファイルが含まれている場合、そのファイルは次のような一連のサブディレクトリの中に配置されます。 ....\com\apple\computers\Dell.java コンパイル時の出力ファイルの仕組み コンパイルを実行すると、コンパイラはソースファイル内で定義されているク

  2. Javaで他のパッケージのクラスを使用する3つの方法

    Javaで他のパッケージのクラスを利用する方法 Javaでは、関連するクラスをパッケージにまとめることでコードを整理できます。ここでは、payrollパッケージ内に定義されたBossクラスを例に、別のパッケージにあるクラスを利用する方法を解説します。 package payroll; public class Boss { public void payEmployee(Employee e) { e.mailCheck(); } } 上記のコードは、BossクラスとEmployeeクラスが同じpayrollパッケージに存在する場合の例です。しかし、もしEmpl