12.Map

Map構造 コレクションクラス

Map構造は、キーと値をセットにしたものを1つの要素として管理するデータ構造です。
HashMap」「TreeMap」の2種類があります。

Map構造

要素がキーと値で管理されているので、キーを指定して値の取得や更新、削除を行います。

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は使用することができません。

インタフェイスの活用

さらに便利なことに,コレクションクラスはCollectionMapというインタフェイスを実装しています。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としてください。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


Related Post

ReferenceReference

【参考文献(英語)】 http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/ — Algorithms and Data Structures Research & Reference Material https://www.cs.auckland.ac.nz/software/AlgAnim/ppt/ — Data Structures and Algorithms, PowerPoint slides https://www.cs.auckland.ac.nz/software/AlgAnim/ds_ToC.html […]

8.Sort8.Sort

ソートとは ソートとは,複数のデータを特定の順序に従うよう並べ替える作業のことです。順番の決め方には次の2つがあります。 昇順:小さいものから大きなものへ 降順:大きなものから小さなものへ   並べ替えは、主にデータベースなどの大量のデータを処理する必要のあるプログラムで有用です。試験の点数の高い順番に並べ替えて、上位1000人を合格にするなどの場合は、点数による並べ替えが行われます。また、住所録のデータを住所毎にまとめて参照したい場合は、住所(文字列)による並べ替えが行われます。 ソートアルゴリズム ソートの処理は、さまざまなプログラムの中で頻繁に使われ、そのゆえ、古くからいろいろなアルゴリズムが考案されてきました。 ソートを行うアルゴリズムの例として次のものが挙げられます。 基本形 基本交換法:バブルソート 基本選択法:直接選択法 基本挿入法 応用形 改良交換法:クイックソート 改良選択法:ヒープソート 改良挿入法:シェルソート バブルソート バブルソート (bubble […]

10.String Searching10.String Searching

文字列を検索する – indexOf/lastIndexOfメソッド 文字列に含まれる部分文字列を検索するには、indexOfメソッドを利用します。indexOfメソッドは、指定された部分文字列が最初に登場した位置を、文字列の先頭を0としたインデックス番号で返します。文字列が見つからなかった場合、戻り値は-1となります。第2引数で、検索開始位置を指定することもできます。 1 2 3 String str = "にわにはにわにわとりがいる"; System.out.println(str.indexOf("にわ"));  // 結果:0 System.out.println(str.indexOf("にわ", 1));   // 結果:4 部分文字列を文字列の末尾から検索するならば、lastIndexOfメソッドを利用してください。 1 […]