Developer

【はじめてのJava】Map【いろいろなクラス編】
2021.12.30
Lv1

【はじめてのJava】Map【いろいろなクラス編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


今回の記事では、Javaで複数のオブジェクトをひとまとまりにして扱うために用意されたコレクション機能のうち、Mapインタフェースの解説を行います。

目次


Mapインタフェース

Javaでは、複数のオブジェクトをひとまとまりにして扱うためにコレクションという機能がありました。
コレクションには用途に応じていくつかの種類があり、大きな分類として、「Collection」インタフェースから継承されるものと「Map」インタフェースから継承されるものがありました。
今回は、「Map」インタフェースの特徴とMapインタフェースを実装して定義されているクラスの解説を行います。
Mapインタフェースの特徴は、1つのデータを「キー」と「値」のペアで管理し、オブジェクトに格納することです。
Listでは、インデックスの番号でデータを管理していましたが、Mapでは任意のデータ(文字列や数値など)をキーとしてデータを管理できます。

そのため、「キー」として利用するデータは重複することができず、キーに対応する「値」はデータの重複が許可されています
キーは番号とは限らないため、必ずしも格納するデータの順序が維持されるとは限りません。
クラスによっては、キーの値でソートを行うものも存在しています。

代表的なクラスは「HashMap」「LinkedHashMap」「TreeMap」などです。


HashMap

Mapインタフェースは、データの格納方法や取り出し方が今までに紹介してきたArrayListなどとは大きく異なります。
Mapインタフェースの実装クラスのうち、「HashMap」クラスを例に挙げてMapの基礎的な操作方法を解説していきます。

HashMapクラスの特徴としては以下の通りです。

  • 値にnullを格納することが可能
  • 同期性をサポートしていない
  • キーと値のペアは順不同で格納される。(ソートされない)

HashMapの定義

HashMapのクラス定義は以下のようになっており、キーと値のデータ型はジェネリクスを使用して定義します。

public class HashMap<K,V>
	extends AbstractMap<K,V>
	implements Map<K,V>, Cloneable,Serializable {
	
	//↑K,Vがジェネリクスで定義されていて、Kはキー、Vは値のデータ型を示しています。

上記のクラス定義から、HashMapのオブジェクトを作成する際には以下のような構文を利用します。
ジェネリクスを使用しますので、キーと値に利用可能なデータ型はオブジェクト参照型のみになります。

HashMap<キーのデータ型,値のデータ型> 変数名 = new HashMap<>();

データの格納

Mapにデータ(キーと値のペア)を格納する際には、「putメソッド」を利用します。
putメソッドは以下のように定義されています。

public V put(K key,V value)

上記のように、putメソッドの引数は2つになっていて、(キー,値)の順でデータを格納します。
指定されたキーに対して既に値が割り当てられている場合には、新しい値で上書きされます。

データの取得

Mapからデータ(キーに紐づけられた値)を取り出す際には、「getメソッド」を利用します。
getメソッドは以下のように定義されています。

public V get(Object key)

getメソッドの引数にキーを渡すことで、そのキーに対応する値を戻り値として返します。
マップの中に、引数として指定したキーに対応する値がない場合にはnullが返されます。

サンプルコード

Mapへのデータの格納、取得の方法をサンプルコードで確認しましょう。

class MapSample{
	public static void main(String[] args) {
		
		HashMap<String,Integer> priceMap = new HashMap<>();
		//HashMapの定義
		
		priceMap.put("pencil",50);
		priceMap.put("notebook",100);
		priceMap.put("eraser", 80);
		//Mapにデータを格納
		
		System.out.println(priceMap.get("pencil")); //pencilに対応する値(50)を取得
		System.out.println(priceMap.get("notebook")); //notebookに対応する値(100)を取得
		
	}
}

いろいろなクラス編・次回の内容

今回でいろいろなクラス編は終了になります。
ListやSet、Queueの詳しいクラスや使い方の解説はJava Silverの試験範囲ではありませんので今回は割愛しましたが、コラムで紹介したいと思います。


初めてのJavaシリーズの目次はこちら
いろいろなクラス編の記事一覧はこちら


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら