Ruby哈希表:内部机制的核心组件
1. 从哈希表中检索值
在Ruby中,哈希表是一种非常强大的数据结构。当我们需要从哈希表中检索某个键对应的值时,哈希表的优势就体现出来了。例如:
p my_hash[:key]
=> "value"
如果Ruby将所有的键和值存储在数组或链表中,那么它就需要遍历数组或链表中的所有元素来查找 :key
,这可能会花费很长时间,具体取决于元素的数量。但使用哈希表,Ruby可以通过重新计算键的哈希值,直接跳转到需要查找的键。
为了重新计算特定键的哈希值,Ruby会再次调用哈希函数:
some_value = internal_hash_function(:key)
然后,将哈希值除以桶的数量以得到余数,即模数:
some_value % 11 = 2
此时,Ruby就知道要在编号为2的桶中查找键为 :key
的条目。之后,Ruby可以通过重复相同的哈希计算来找到 :key2
的值。
2. 不同大小哈希表中检索值的实验
为了测试Ruby在不同大小的哈希表中检索值的性能,我们进行了以下实验:
require 'ben