2008/04/24

Mapって知ってますか? [ Java ]

タイトルを見てこう思った人がいるかもしれない。

はい! 地図の事です!







お前は俺か。


はい、という訳で今日はまずJavaのMapという物の概念から
考えていきましょー。まぁJavaに限らずほとんどの言語に
ある話なんで多分みなさん知ってると思うんですが。

さて、Mapというのはキーとそれに対応する値がセットになった
エントリの集合体のような物です。
はい、何を言っているか分かりませんね。
例えば、学校のクラスの出席番号を考えてみましょう。

 No 名前
 1  山田
 2  畠中
 3  川畑
 4  立神

こんな出席番号のクラスがあったとしましょう。
さてここで質問です。出席番号2番の生徒の名前は?

答えは当然"畠中"君ですね。(畠中さん、かもしれないですが)
このように、キー値(出席番号)と、それに対応する値(名前)が
セットになったエントリ(No:名前)が複数ある物がMapです。

さて、ここでさっきのデータにエントリを増やしてみます。

 No 名前
 1  山田
 2  畠中
 3  川畑
 4  立神
 2  計羅

上記データはMapとして……いや、出席番号として正しく機能するでしょうか?
勿論、答えはNo!!! です。何故ならこのクラス、出席番号2番の人! と先生が
点呼をすると

畠中「はい!」
計羅「ういす!!」

二人返事しちゃいますね。これじゃ出席番号としては機能してません。
これと同じように、Mapにおいてはキー値は重複しないという約束が
あります。特に難しい事は無いですね。

じゃ、これを実際にJavaのコードにしてみたものを以下に。

Map classMap = new HashMap();

classMap.put(1, "山田");
classMap.put(2, "畠中");
classMap.put(3, "川畑");
classMap.put(4, "立神");


こんな感じでしょうか?(コンパイル通してないからあってるか不安……)
上記コードのclassMapというマップが上の方で作ったデータと
全く同じ事を示している状態になります。

ここでは例としてMapの実装クラスはHashMapを使いましたが、他の
物を使った時との違いを今度書きたいと思います。

4 件のコメント:

maito さんのコメント...

これハッシュだね!!

ふぉー さんのコメント...

そそ。ハッシュ。
ただ(非常に細かい話になるんだけど)正確には"ハッシュ"は間違い。
正解は"ハッシュテーブル"。

またはプログラムで使う場合は連想配列って
言えば間違いは無いかなー。

連想配列の内部実装にハッシュテーブルを
使っているのでハッシュとよく呼ばれるみたい。


……今度ハッシュ関数、ハッシュ値、ハッシュテーブルについてのエントリを
書いてもいいかもしんない……。

maito さんのコメント...

>ハッシュテーブル

細かくいくなら、確かに間違いだね。(そこまで細かくいくか!!(笑))

あ、あと、ブログからt.satoさんのブログにリンク貼っちゃったけど、大丈夫だったよね??

一応、確認のために、コメント入れました。

ふぉー さんのコメント...

>ハッシュ
細かい話だけど、ここらへんの用語に関する
意識の整合性が取れてないとたまに変な
勘違いを起こす事があるからねー。
今もそういう所でしなくてもいい苦労を
してます……

>ブログ
ぜんぜんおっけーよー。
俺の恥ずかしい投稿が・・・