- 概要
hash表是一种非常重要的数据结构,用于存储键/值对.
可方便的向hash表中加入条目,使用键值取得条目.
根据运行效率的不同, CLISP中有三种hash表类型: 标准hash表,快速hash表和稳定hash表.
它们的区别是:
对于快速hash表,垃圾回收器会便利其中的哈希值无效,被错误的回收了(除非所有的key值都是即对象,如常量字符串,数字等).
对稳定hash表,垃圾绝不会对其进行错误回收,因此key值可以是任何CLISP对象.
使用的时候注意,一般对生命周期短的hash表可以考虑使用快速hash表.
- hash表操作函数
- make-hash-table 创建一个hash表
(MAKE-HASH-TABLE &KEY :TEST :INITIAL-CONTENTS :SIZE
:REHASH-SIZE :REHASH-THRESHOLD
:WARN-IF-NEEDS-REHASH-AFTER-GC :WEAK)
:TEST 可选参数可以为EXT:FASTHASH-EQ, STABLEHASH-EQ,分别表示创建快速hash表和稳定hash表.
:INITIAL-CONTENTS 初始化值
:SIZE hash表大小
- gethash 取出一条
(gethash key hash-table)
- remhash 删除一条,remove from hash的意思
(remhash key hash-table)
- clrhash 清空hash表,执行这个函数后,hash表中的元素个数为0,但大小不一定为0.
(clrhash hash-table)
- hash-table-count hash表中的元素个数
- hash-table-size hash表的大小
- hash-table-p 检测一个对象是否是hash表.
(hash-table-p object)
CL> (hash-table-p (make-hash-table))
T
CL> (hash-table-p 123456)
NIL
CL> (hash-table-p "abcd")
NIL
- sxhash 返回一个对象的hash 值.
CL> (sxhash 123456)
3950784
- hash-table-test 检测hash表使用哪种key值比较方式.
可能的比较方式有:
EXT:FASTHASH-EQ EXT:FASTHASH-EQUAL
EXT:STABLEHASH-EQ EXT:STABLEHASH-EQUAL
EXT:FASTHASH-EQL EQUALP
EXT:STABLEHASH-EQL
- 遍历hash表中的元素
宏 DOHASH , 与DOLIST比较类似.
(EXT:DOHASH (key-var value-var hash-table-form [resultform])
key-var 遍历过程中存储key的变量.
value-var 遍历过程中存储value的变量.
hash-table-form 表示一个hash表对象
resultform 这个语句的值作为DOHASH表达式的值返回.
|