(: hash table) 1
ハッシュテーブルの例(名前をキーとして電話番号を検索)

概要

編集

O(1)O(n)

衝突処理

編集

 (collision) 

連鎖法

編集

衝突を起こしたキー同士をポインタでつなぐ方式を連鎖法と呼ぶ。テーブルの各番地にはキーそのものではなく、同族キーを保持するリンクリストを格納する。

開番地法

編集


実装方法

編集

 N便

 0  N- 1  i i

 j j

ハッシュテーブルの自動拡張

編集

load factor()n/NnN

load factorload factor0.8

load factor (rehash) O(n)O(1)


全要素の列挙

編集

順序保証のない列挙

編集

最も単純な実装として、ハッシュテーブルのルート配列上を 0 から N - 1 まで走査し、その中に存在するエントリを列挙する方法がある。連鎖法の場合は見つかったエントリリストをさらにたどる必要がある。しかしこの方法で列挙した場合、各エントリはハッシュ関数によって格納位置を決められているために、全く意味を持たない順序で要素が列挙される。これはランダムな順序という意味ではない。利用方法によっては列挙操作が追加した順序を保持しているかのように見えるため、ハッシュテーブルの利用者が誤解する場合がある。この実装による列挙の計算量はルート配列のサイズ N と連鎖法でのルート配列上にないエントリリストの数 m との合計O(N + m)となる。そのため、ルート配列をあらかじめ大きなサイズで確保しているとこの実装での列挙に時間がかかる。

追加した順序での列挙

編集

O(1)JavaLinkedHashMap便

プログラミング言語におけるハッシュテーブルの実装

編集

脚注

編集

関連項目

編集