hash-table-rehash-threshold
hash-table-rehash-threshold Function
Syntax:
hash-table-rehash-threshold hash-table → rehash-threshold
Arguments and Values:
hash-table—a hash table.
rehash-threshold—a real of type (real 0 1).
Description:
Returns the current rehash threshold of hash-table, which is suitable for use in a call to make-hash-table in order to produce a hash table with state corresponding to the current state of the hash-table.
Examples:
(setq table (make-hash-table :size 100 :rehash-threshold 0.5))
→ #<HASH-TABLE EQL 0/100 2562446>
(hash-table-rehash-threshold table) → 0.5
Exceptional Situations:
Should signal an error of type type-error if hash-table is not a hash table.
See Also:
make-hash-table, hash-table-rehash-size
Expanded Reference: hash-table-rehash-threshold
Basic Usage
hash-table-rehash-threshold returns the current rehash threshold, a value between 0 and 1 indicating how full the table can get before it grows.
(let ((ht (make-hash-table :rehash-threshold 0.7)))
(hash-table-rehash-threshold ht))
; Implementation-dependent, but close to 0.7
Default Threshold
;; Default rehash threshold is implementation-dependent
(let ((ht (make-hash-table)))
(let ((threshold (hash-table-rehash-threshold ht)))
(and (<= 0 threshold) (<= threshold 1))))
=> T
Effect of Different Thresholds
A lower threshold means the table rehashes sooner (more memory, potentially fewer collisions). A higher threshold means the table fills more before growing.
;; Low threshold: eager rehashing
(let ((ht (make-hash-table :rehash-threshold 0.3)))
(realp (hash-table-rehash-threshold ht)))
=> T
;; High threshold: compact storage, later rehashing
(let ((ht (make-hash-table :rehash-threshold 0.9)))
(realp (hash-table-rehash-threshold ht)))
=> T
Preserving Configuration When Copying
(let* ((ht1 (make-hash-table :rehash-threshold 0.5 :test #'equal))
(ht2 (make-hash-table
:rehash-threshold (hash-table-rehash-threshold ht1)
:test (hash-table-test ht1))))
(maphash (lambda (k v) (setf (gethash k ht2) v)) ht1)
(hash-table-test ht2))
=> EQUAL