Mapインターフェース

コレクションフレームワークに属するMapインターフェースはListインターフェースと違い、0から始まるインデックスではなくキーとバリューを一対にして要素を管理します。mapインスタンスの宣言はジェネリックの< >の中にキーとバリューの型をカンマ区切りで指定し、要素の登録はputメソッド、取り出しはgetメソッドで行います。
要素の登録では同じキーの複数登録はできませんが、キーが違えば同じバリューの複数登録は可能です。

要素を連続して取り出すには、keySetメソッドでキーの一覧をSetオブジェクトに取り出し、Setオブジェクトから拡張for文でキーを順次取り出しながら、getメソッドでバリューを取出します。下記HashMapを使ったサンプルの15行目から18行目及び21行目から24行目を参照)

Mapインターフェースの実装の一つがHashMapです。
HashMapはハッシュを使って、要素の保存場所を決定するので、要素の追加・削除・変更という操作が、要素の数に関わらず一定の時間で実行可能です。

import java.util.Map;
import java.util.Set;
import java.util.HashMap;

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

		Map<Integer, String> map=new HashMap<>( ); 
		System.out.println(map.size());
		System.out.println("---------------");
		map.put(1, "Bach");
		map.put(10, "Chopin");
		map.put(100, "Anonymous");
		
		Set<Integer> keys = map.keySet();
		for(int key: keys) {
			System.out.println("key:" + key + " value:" + map.get(key));
		}
		System.out.println("---------------");
		map.put(101, "Anonymous");
		keys = map.keySet();
		for(int key: keys) {
			System.out.println("key:" + key + " value:" + map.get(key));
		}
		System.out.println("---------------");
		System.out.println("Map contains key:10 (\"Chopin\"):" + map.containsKey(10));
		map.remove(100, "Anonymous");
		System.out.println(map.size());
		System.out.println(map);
	}
}

実行結果
>java HashMapSample
0
—————
key:1 value:Bach
key:100 value:Anonymous
key:10 value:Chopin
—————
key:1 value:Bach
key:100 value:Anonymous
key:101 value:Anonymous
key:10 value:Chopin
—————
Map contains key:10 (“Chopin”):true
3
{1=Bach, 101=Anonymous, 10=Chopin}

>

また、別の実装としてTreeMapクラスがあります。
基本的な仕様はHashMapと変わりませんが、要素を辞書順にソートして管理します。
実行結果の最後のmap内の要素の呼び出し結果をHashMapのそれと比較してください。

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

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

		Map<Integer, String> map=new TreeMap<>( ); 
		System.out.println(map.size());
		System.out.println("---------------");
		map.put(1, "Bach");
		map.put(10, "Chopin");
		map.put(100, "Anonymous");
		
		Set<Integer> keys = map.keySet();
		for(int key: keys) {
			System.out.println("key:" + key + " value:" + map.get(key));
		}
		System.out.println("---------------");
		map.put(101, "Anonymous");
		keys = map.keySet();
		for(int key: keys) {
			System.out.println("key:" + key + " value:" + map.get(key));
		}
		System.out.println("---------------");
		System.out.println("Map contains key:10 (\"Chopin\"):" + map.containsKey(10));
		map.remove(100, "Anonymous");
		System.out.println(map.size());
		System.out.println(map);
	}
}

実行結果
>java TreeMapSample
0
—————
key:1 value:Bach
key:10 value:Chopin
key:100 value:Anonymous
—————
key:1 value:Bach
key:10 value:Chopin
key:100 value:Anonymous
key:101 value:Anonymous
—————
Map contains key:10 (“Chopin”):true
3
{1=Bach, 10=Chopin, 101=Anonymous}

>

コレクション に戻る