Map構造 コレクションクラス
Map構造は、キーと値をセットにしたものを1つの要素として管理するデータ構造です。
「HashMap」「TreeMap」の2種類があります。
要素がキーと値で管理されているので、キーを指定して値の取得や更新、削除を行います。
Map構造は、キーによって値を管理するためキーの重複は不可です。
(同じキーがセット(put)された場合は上書きされます。)
マップ(HashMap)
HashMap は、名前(キー)と値の組み合わせを要素として持つ配列です。
HashMapは格納順は管理されません。キーと値にnullを使用することが可能です。
HashMap hm = new HashMap();
hm.put("Brian Kernighan","A REGULAR EXPRESSION MATCHER");
hm.put("Karl Fogel","SUBVERSION'S DELTA EDITOR: INTERFACE AS ONTOLOGY");
hm.put("Jon Bentley","THE MOST BEAUTIFUL CODE I NEVER WROTE");
hm.put("Tim Bray","FINDING THINGS");
println("Get a Element > " + hm.get("Brian Kernighan") );
println("Get a Element > " + hm.get("Jon Bentley") );
マップ(TreeMap)
TreeMap も HashMap と同じように使用できます。要素がキーによって自動的にソートされる点が HashMap と異なります。TreeMapはnullは使用することができません。
インタフェイスの活用
さらに便利なことに,コレクションクラスはCollection
やMap
というインタフェイスを実装しています。Java言語の仕組み上,インタフェイスのオブジェクトにはそのインタフェイスを実装したクラスのオブジェクトへの参照を持たせることができます。
次のスケッチのように,カチッ!カチッ!とコードを切り替えて,ほとんど同じコードで全く別のデータを取り扱えます。これこそコレクションクラスを利用するメリットです。もっと言えば,オブジェクト指向プログラミングのメリットです。
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
HashMap hm = new HashMap();
Map m;
m = hm;
m.put("Brian Kernighan","A REGULAR EXPRESSION MATCHER");
m.put("Karl Fogel","SUBVERSION'S DELTA EDITOR: INTERFACE AS ONTOLOGY");
m.put("Jon Bentley","THE MOST BEAUTIFUL CODE I NEVER WROTE");
m.put("Tim Bray","FINDING THINGS");
HashMap hm2 = new HashMap();
m = hm2;
m.put(1,123);
m.put(2,223);
m.put(3,323);
m = hm;
println("Get a Element from Interface m > " + m.get("Tim Bray") );
m = hm2;
println("Get a Element from Interface m > " + m.get(2) );
m = hm;
Set s = m.keySet();
for(Object o : s){
println("Element is " + m.get(o) );
}
m = hm2;
s = m.keySet();
for(Object o : s){
println("Element is " + m.get(o) );
}
演習
(難易度:easy)
MapInterface.pde
のコード末尾にあるfor
ループを切り分けましょう。そして,Map
インタフェイスを実装したクラスであれば何であれ,受け取って要素に格納された値を列挙するメソッドにしてください。ファイル名はUsefulMapInterface.pde
としてください。