libro
www.tuyano.com
初心者のためのJava SEプログラミング入門

コレクション・フレームワーク (4/5)

作成:2012-05-06 10:29
更新:2012-05-06 10:29

■HashMapによるマップの利用

配列は数字で値を管理しますが、数字の代わりに「名前」で値を管理する連想配列と呼ばれる機能を提供するのが、「マップ」というものです。これは「Map」というインターフェイスを実装したクラスとして、けっこうな数のものが用意されています。その中で、もっとも一般的に使われるのは「HashMap」というクラスでしょう。

マップでは、「キー」と呼ばれる名前と値が組になっています。この組のことを「エントリー(Entry)」といいます。このエントリーの形で値はマップ内で管理されている、と考えるとよいでしょう。取り出すときには、キーを指定して取り出します。では、このHashMapも基本的な使い方を整理しておきましょう。まずはコンストラクタからです。
HashMap 変数 = new HashMap();
この他にもいくつかコンストラクタはありますが、これだけ覚えておけばいいでしょう。続いて、その他のメソッドについてです。

・値の追加
《HashMap》.put( キー , 値 );
値の追加は、addではなく「put」というメソッドとして用意されています。引数には、キーとなる値と、それに設定する値の2つを用意します。これで、指定されたキーに値が保管されます。

・値の取得/削除
Object 変数 = 《HashMap》.get( キー );
《HashMap》.reove( 値 );
値の取得は、「get」で行います。引数にキーを指定すると、そのキーに保管されている値が返されます。これはObjectインスタンスにキャストされているので、必要に応じて元のクラスに戻して使います。また、HashMapから保管されている値を削除するには「remove」を使います。これも引数にキーを指定すると、そのキーと、そのキーに保管されている値がとりのぞかれます。

・保管されている全値を得る
Collection] 変数 = 《HashMap》.values();
HashMapに保管されている値だけをまとめて取り出したい時に利用します。返り値は、「Collection」というクラスのインスタンスになります。これは、ArrayListHashSetHashMapなどのコレクションクラスのスーパークラスとなるものです。ここからforなどを使って順に値を取り出し処理できるようになっています。

・保管されている全キーを得る
Set 変数 = 《HashMap》.keySet();
こちらは、保管されているキーをまとめて取り出すものです。返り値は「Set」インスタンスになります。Setというのは、HashSetの元になるもので、たくさんの値をまとめる集合です。これですべてのキーをまとめて取り出し、forなどを使って順に処理することができます。

・Map.EntryのSetを得る
Set 変数 = 《HashMap》.entrySet();
HashMapに保管されている全要素を処理したりするのに利用します。これは保管されている全要素を、「Map.Entry」というクラスのインスタンスをSetでまとめたものとして取り出します。Map.Entryというのは、先ほど触れたように、キーと値を組にして保管するクラスでしたね。これでSetを取り出し、forでそこから順にMap.Entryを取り出して処理することができます。

・要素数を得る
int 変数 = 《HahsMap》.size();
保管されている値の数を得るものです。これは既に登場したのでわかりますね。


――では、このHashMapも簡単な利用例を挙げておきましょう。下のリスト欄は、HashMapを作成した後、いくつかの値を保管して、その全要素を取り出し表示するサンプルです。ここでは、putでいくつかの値を保管した後、以下のようにして繰り返し処理を行なっています。
for(Object obj : map.entrySet()){……略……}
entrySetで、Map.EntryをまとめたSetを取り出し、forでそこから順番にオブジェクトを取り出しています。取り出したオブジェクトは、Map.Entryインスタンスに戻してから、そのキーと値を取り出しています。
Map.Entry entry = (Map.Entry)obj;
System.out.println(entry.getKey() + ": " + entry.getValue());
Map.Entryクラスは、キーと値をセットにしたものです。保管されているキーと値は、それぞれ「getKey」「getValue」でとり出すことができます。後は、それをもとに値を表示するだけですね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

import java.util.*;

public class TestApp {

	public static void main(String[] args) {
		HashMap map = new HashMap();
		map.put("国語", 98);
		map.put("算数", 79);
		map.put("理科", 65);
		map.put("社会", 82);
		for(Object obj : map.entrySet()){
			Map.Entry entry = (Map.Entry)obj;
			System.out.println(entry.getKey() + ": " + entry.getValue());
		}
	}

}

※関連コンテンツ

「初心者のためのJava SEプログラミング入門」に戻る