Map インタフェース (HashMap / TreeMap)

キーと値の対になる要素を持ったオブジェクト.

各キーは一つの値にしかマッピング出来ず, マップには同一のキーを複数登録できない. しかし, 異なるキーで値が同じ値を登録することができる.

TreeMap クラスなど一部のマップの実装では, 要素の順序について保証するが, HashMap クラスなどの実装ではどのような順序で要素が登録されているか保証されない:

Collection インタフェースを実装しない
コレクション内のオブジェクトに名前を付けて管理することが可能
同じオブジェクトへの参照を複数保持することができる

HashMap

HashMap も ArrayList 同様, 多く使われているフレームワークの一つで, Map インタフェースのハッシュテーブルに基づく実装.

値を名前付きで管理することができるので, 簡易的なデータベースのような使い方も可能だが, ただし, HashMap ではマップの順序について保証されない.

HashMap の主なメソッド

clear: 全てのマッピングをマップから削除する
containKey: 指定したマップが存在するかどうかを真偽値で返す
KeySet: マップに格納されているキーのセットビューを返す
get: 指定したキーにマップされている値を返す
isEmpty: マップが空きかどうかを真偽値で返す
put: 指定の値と指定されたキーをこのマップに関連づける
remove: キーに対応したマップがあれば削除する
size: マップの要素の数を返す
values: マップに格納されている値のコレクションビューを返す

HashMap の使い方

HashMapTest.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.HashMap;

public class HashMapTest{
    public static void main(String[] args){
	HashMap<String, String> hm = new HashMap<String, String>();
	HashMap<String, Integer> family = new HashMap<String, Integer>();

	hm.put("1", "Jan");
	hm.put("2", "Feb");
	hm.put("3", "Mar");
	hm.put("4", "Apr");
	hm.put("5", "May");
	hm.put("6", "Jun");
	hm.put("7", "Jul");
	hm.put("8", "Aug");
	hm.put("9", "Sep");
	hm.put("10", "Oct");
	hm.put("11", "Nov");
	hm.put("12", "Dec");
	System.out.println("Month HashMap is: " + hm);

	family.put("feifei", 28);
	family.put("yangyang", 8);
	family.put("yangguang", 2);
	family.put("kankan", 1);
	System.out.println("Family HashMap is: " + family);
    }
}

HashMapTest.java の実行結果は:

[wtopia java.cf]$ java HashMapTest
Month HashMap is: {3=Mar, 2=Feb, 10=Oct, 1=Jan, 7=Jul, 6=Jun, 5=May, 4=Apr, 9=Sep, 8=Aug, 11=Nov, 12=Dec}
Family HashMap is: {yangguang=2, yangyang=8, feifei=28, kankan=1}

HashMap へのデータ登録は put メソッドを使用する. 第 1 引数にキー値を, 第 2 引数に値を指定する.

HashMap では格納した要素がどのような順番で取り出されるかは保証していない.

HashMap の全要素へアクセス

AccessHashMap.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.HashMap;
import java.util.Iterator;

public class AccessHashMap{
    public static void main(String[] args){

	String strKey, strVal;
	
	HashMap<String, String> hm = new HashMap<String, String>();

	hm.put("1", "Jan");
	hm.put("2", "Feb");
	hm.put("3", "Mar");
	hm.put("4", "Apr");
	hm.put("5", "May");
	hm.put("6", "Jun");
	hm.put("7", "Jul");
	hm.put("8", "Aug");
	hm.put("9", "Sep");
	hm.put("10", "Oct");
	hm.put("11", "Nov");
	hm.put("12", "Dec");

	Iterator it = hm.keySet().iterator();

	while( it.hasNext() ){
	    strKey = (String)it.next();
	    strVal = (String)hm.get(strKey);

	    System.out.print("キー: " + strKey);
	    System.out.println("-->値: " + strVal);
	}

    }
}

AccessHashMap.java の実行結果は:

[wtopia java.cf]$ java AccessHashMap
キー: 3-->値: Mar
キー: 2-->値: Feb
キー: 10-->値: Oct
キー: 1-->値: Jan
キー: 7-->値: Jul
キー: 6-->値: Jun
キー: 5-->値: May
キー: 4-->値: Apr
キー: 9-->値: Sep
キー: 8-->値: Aug
キー: 11-->値: Nov
キー: 12-->値: Dec