% Function MAKE-HASH-TABLE
Function MAKE-HASH-TABLE
make-hash-table
&key
test size rehash-size rehash-threshold
=> hash-table
test - 関数eq
, eql
, equal
, equalp
のうちの
ひとつに対する指定子。
デフォルトはeql
。
size - 非負の整数。デフォルトは実装依存。
rehash-size - 型(or (integer 1 *) (float (1.0) *))
の実数。
デフォルトは実装依存。
rehash-threshold - 型(real 0 1)
の実数。
デフォルトは実装依存。
hash-table - ハッシュテーブル
新しいハッシュテーブルを作成し返却します。
testは、キーをどのように比較するかを決定します。 もしhash-table内の何らかのエントリーのキーが あるオブジェクトとtestで同一であるとき、 そのオブジェクトはhash-table内に存在すると言われます。
sizeはhash-tableの初期スペースをどのようにして確保するかについて、 実装にヒントを与えます。 この情報はrehash-thresholdと一緒に使用され、 テーブルが拡張される前にどれくらいの数のエントリーが 挿入可能であるかの近似を制御します。 実際のサイズは、sizeから次の「良好な」サイズへと切り上げます。 例えば、ある実装では次の素数に切り上げを行います。
rehash-sizeは、 hash-tableがいっぱいになり再ハッシュを必要とするときに、 サイズを増やす最小量を指定します。 下記のrehash-thresholdをご確認ください。 もしrehash-sizeが整数のときは、 テーブルの拡張されるレートが加算的に行われることが期待され、 その整数はエントリーの数に加算されます。 もしrehash-sizeが浮動小数のときは、 テーブルの拡張されるレートが乗算で行われることが期待され、 その浮動小数の値は古いサイズに対する新しいサイズの比率になります。 size同様に、実際の増加分は切り上げられるかもしれません。
rehash-thresholdは、 hash-tableがどの程度まで一杯になったら 拡張しなければならないかを指定します。 これはハッシュテーブルの最大占有率を指定します。
rehash-sizeとrehash-thresholdの値は、 hash-tableのサイズをいつどのように拡張するべきかについて、 実装に何らかの特定な方法を使うような制約をすることはありません。 そのような決定は実装依存であり、 それらの値はただ実装プログラミングする人へのヒントであり、 実装はそれらを無視することも許されます。
(setq table (make-hash-table)) => #<HASH-TABLE EQL 0/120 46142754>
(setf (gethash "one" table) 1) => 1
(gethash "one" table) => NIL, false
(setq table (make-hash-table :test 'equal)) => #<HASH-TABLE EQUAL 0/139 46145547>
(setf (gethash "one" table) 1) => 1
(gethash "one" table) => 1, T
(make-hash-table :rehash-size 1.5 :rehash-threshold 0.7)
=> #<HASH-TABLE EQL 0/120 46156620>
なし。
なし。
なし。