前回は、データを追加・削除できるArrayListについて学習しました。
ArrayListでは、データを順番に格納し、位置を指定して取り出すことができます。
ArrayList<String> names = new ArrayList<>();
names.add("田中");
names.add("鈴木");
System.out.println(names.get(0));
この場合、最初のデータである「田中」が表示されます。
では、商品コードから商品名を探したい場合や、社員番号から社員名を取り出したい場合はどうでしょうか?
このように、ある情報を手がかりに、対応する別の情報を取り出したい場合に便利なのがHashMapです。
HashMapは、キー(Key)と値(Value)を組み合わせてデータを管理するクラスです。
例えば、商品コードと商品名を管理する場合、次のような対応関係を作れます。
商品コード 商品名
A001 商品A
A002 商品B
A003 商品C
この場合、商品コードがキー、商品名が値になります。
HashMapを使うと、商品コードを指定して商品名を取り出せます。
HashMapを利用するには、まずimport文を記述します。
import java.util.HashMap;
次に、HashMapを作成します。
HashMap<String, String> products = new HashMap<>();
この記述では、キーも値もString型のHashMapを作成しています。
キーと値は、異なる型にすることもできます。
HashMap<String, Integer> stock = new HashMap<>();
この例では、String型のキーに対して、Integer型の値を管理します。例えば、商品コードと在庫数の組み合わせに利用できます。
HashMapにデータを登録するには、put()メソッドを使用します。
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap<String, String> products = new HashMap<>();
products.put("A001", "商品A");
products.put("A002", "商品B");
products.put("A003", "商品C");
System.out.println(products);
}
}
put()では、キーと値を指定します。
products.put("A001", "商品A");
このように、キーと値を組み合わせて登録します。
なお、HashMapはデータの並び順を保証しません。そのため、表示される順番は登録した順番と一致するとは限りません。
キーに対応する値を取り出すには、get()メソッドを使用します。
System.out.println(products.get("A001"));
System.out.println(products.get("A003"));
商品A
商品C
ArrayListでは位置を指定しましたが、HashMapではキーを指定して値を取得する点が大きな違いです。
products.get("A001");
この場合、キー「A001」に対応する「商品A」が取得されます。
存在しないキーを指定した場合、get()はnullを返します。キーが登録されているか確認したい場合は、次に紹介するcontainsKey()を利用できます。
HashMapでは、同じキーを使ってput()を実行すると、対応する値が更新されます。
products.put("A001", "商品A");
products.put("A001", "新しい商品A");
System.out.println(products.get("A001"));
新しい商品A
同じキーを使っても、同じキーのデータが2件になるわけではありません。
同じキーに対してput()を実行すると、値が置き換わるという点を覚えておきましょう。
指定したキーがHashMapに登録されているか確認するには、containsKey()メソッドを使用します。
if (products.containsKey("A001")) {
System.out.println("商品が登録されています。");
} else {
System.out.println("商品が登録されていません。");
}
商品が登録されています。
containsKey()は、キーが存在する場合にtrue、存在しない場合にfalseを返します。
そのため、if文と組み合わせて、キーが登録されているかどうかによって処理を分けることができます。
HashMapからデータを削除するには、remove()メソッドを使用します。
products.remove("A002");
この場合、キー「A002」と、それに対応する値が削除されます。
削除後に確認してみましょう。
System.out.println(products.get("A002"));
null
キー「A002」のデータが削除されたため、対応する値を取得できなくなっています。
HashMapに登録されているキーと値の組み合わせの数を取得するには、size()メソッドを使用します。
System.out.println(products.size());
例えば、3件登録されている場合は、次のように表示されます。
3
ArrayListと同じく、HashMapでもsize()を使用して件数を取得できます。
HashMapに登録されているキーを順番に取り出すには、keySet()を利用できます。
for (String key : products.keySet()) {
System.out.println(key + ":" + products.get(key));
}
このコードでは、keySet()でキーの集合を取得し、拡張for文でキーを1つずつ取り出しています。
そのキーをget()に渡すことで、対応する値を取得できます。
ただし、HashMapは表示順を保証しないため、実行結果の順番は登録順と一致するとは限りません。
順番や位置でデータを扱いたいならArrayList、キーを手がかりにデータを取り出したいならHashMapというように使い分けましょう。
products.put("A001", "商品A");
put()では、最初にキー、次に値を指定します。
同じキーを指定してput()を実行すると、対応する値が更新されます。
HashMapでは、通常、添字ではなくキーを指定して値を取得します。
products.get("A001");
HashMapは要素の順番を保証しません。表示順に意味がある場合は、別の方法を検討する必要があります。
HashMapは、商品コードと商品名、社員番号と社員名など、対応関係のあるデータを管理する場合に便利です。
次回は、プログラムの実行中にエラーが発生した場合に備える例外処理について学習します。