凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 48909
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

前回では2次元にキーを持つMapというものを紹介しました。

しかし、2分木を2段構成にするデータ構造でしたので、データへのアクセスにはそれなりのオーバーヘッドがあります。
今回紹介するコードはそのハッシュテーブル版です。

仕組み

まず、ハッシュテーブルの仕組みから入りましょう。
ハッシュテーブルでは格納する際にキーとなる値からなんらかの方法で格納位置を算出し、配列の該当インデックスにデータを格納します。

「なんらかの方法」というところが曖昧なのですが、これはキーとなるオブジェクトの実装に依存します。
イメージしやすい例を挙げると、伝票などをアイウエオ順に棚に格納するようなイメージです。 「ア」から始まるものは「ア」の棚に入っていますよね。その棚というだけで走査対象となるデータが一気に減ります。 ざっくり減らしたところでキーと合致するものを探すというわけです。

プログラム的には「アイウエオの棚」ではなく、配列です。そして、同じ棚に集中すると効率が悪いですから、 できるだけ均一にばらけるようにすることが望ましいですね。この配列のインデックスは Object#hashCode() によって返される値を利用します。 自前でオブジェクトを作った際にMapのキーとして使いたいのであればこのメソッドをオーバーライドしておく必要があります。

さて、1次元の場合は以上の通りですが、2次元となると格納する棚を2次元にしてやる必要が出てきます。 つまり、2次元配列にしてやるわけです。 その上で、1つ目のキーはX方向の位置決めに使い、2つ目のキーはY方句の位置決めに使うようにします。
こうすることで同じXのキーを持つデータは縦に並び、同じYのキーを持つデータは横に並びます。 すると、XとYを両方指定してピンポイントでデータを取り出すことも出来るうえに、 片方のキーだけ同じものを取り出すこともできます。
Mapを格納したMapの場合だと、外側のMapのキーが同じものを並べることはできますが、 内側のMapのキーが同じものを並べるのは容易ではありません。 この点、2次元Mapでは縦横無尽にデータにアクセスできるわけですね。

と、いったところでコードの解説は次回以降としましょう。

投稿日時 : 2007年9月25日 18:18
コメント
  • # データ構造を考える - 2次元のMap その3
    凪瀬 Blog
    Posted @ 2007/09/26 12:03
    データ構造を考える - 2次元のMap その3
  • # giuvqGHgrUeWiowAT
    http://crorkz.com/
    Posted @ 2014/08/28 3:34
    oAMMkK I've recently started a site, the info you provide on this site has helped me greatly. Thanks for all of your time & work.
タイトル
名前
Url
コメント