Map はキーと対応する値をセットで得たい時に使用するインターフェイスです。
・キー は 一意 のオブジェクトでなければなりませんが、値の重複は可能 です。
・キーのnullは1つのみ、値のnullは複数あってもOK。ただし、後述するTreeMapクラスについてはキーへのnullは許容されません。
・キー は 一意 のオブジェクトでなければなりませんが、値の重複は可能 です。
・キーのnullは1つのみ、値のnullは複数あってもOK。ただし、後述するTreeMapクラスについてはキーへのnullは許容されません。
■Map インターフェイスの実装
Mapはインターフェースなので実装しなければ、使用できません。
よく見かける実装クラスにはHashMap クラス、TreeMapクラス、LinkedHashMap クラスがあります。それぞれのクラスの特徴は下記の通りです。
・HashMap クラスでは、キーの順序は保証されない。
・TreeMapクラス では、キーの順序はソート順になる、キーへのnullは許容されない。
・LinkedHashMap クラスでは、キーの順序は挿入順になる。
下記実装例では、HashMap クラス、TreeMapクラス、LinkedHashMap クラスに同じキーと値のセットを格納し、出力しています。出力結果をみると、TreeMapクラス はソート順、LinkedHashMap クラスは挿入順で出力されていて、HashMap クラスでは順序は保証されていないことがわかります。
実装例:
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
//HashMapクラス(キーの順序は保証されない)
HashMap < String, String > HashMapData = new HashMap < String, String >();
HashMapData. put( "0003", "DDD");
HashMapData. put( "0001", "BBB");
HashMapData. put( "0000", "AAA");
HashMapData. put( "0002", "CCC");
MapTest TestHashMap = new MapTest();
TestHashMap.methodA("HashMap",HashMapData);
//TreeMapクラス(キーの順序はソート順になる)
TreeMap < String, String > TreeMapData = new TreeMap< String, String >();
TreeMapData. put( "0003", "DDD");
TreeMapData. put( "0001", "BBB");
TreeMapData. put( "0000", "AAA");
TreeMapData. put( "0002", "CCC");
MapTest TestTreeMap = new MapTest();
TestTreeMap.methodA("TreeMap",TreeMapData);
//LinkedHashMapクラス(キーの順序は挿入順になる)
LinkedHashMap < String, String > LinkedMapData = new LinkedHashMap < String, String >();
LinkedMapData. put( "0003", "DDD");
LinkedMapData. put( "0001", "BBB");
LinkedMapData. put( "0000", "AAA");
LinkedMapData. put( "0002", "CCC");
MapTest TestLinkMap = new MapTest();
TestLinkMap.methodA("LinkedHashMap",LinkedMapData);
}
}
class MapTest{
void methodA( String msg ,Map< String,String > map ){
System. out. println(msg);
Set < String > keys = map. keySet();
//キーと値を出力
for( String key : keys){
System. out. println( key+ ": "+ map . get(key )+ " ");
}
}
}
実行結果:
HashMap
0002: CCC
0003: DDD
0000: AAA
0001: BBB
TreeMap
0000: AAA
0001: BBB
0002: CCC
0003: DDD
LinkedHashMap
0003: DDD
0001: BBB
0000: AAA
0002: CCC
コメント