-
python 字典:
-
当我们 使用 d = {} 创建字典时,其实python是创建了一个长度为8的数组。
-
当我们插入key,也就是创建键值对时,给字典的key计算一个哈希值,将哈希值转换成十进制后,通过与8进行取余操作,计算出这个key的位置。
-
python 字典的哈希碰撞:
例:d['a'] = 123 d['z'] = 123 当我们给这两个key寻找位置时,假如算出来的位置值一样,hash('a')=4 hash('z')=4 此时就出现了哈希碰撞。
解决方案:
-
python 是开放地址法:将得到的位置值加上偏移量,再次进行位置值计算
例:hash(4 + 偏移量) = new_value
-
python 的扩容原理:
- 已经使用的座位大于三分之二进行扩容,当座位小于50000时,四倍四倍的扩,大于50000时,两倍两倍的扩。
- 当扩容结束后,会触发座位重排,旧数组中的元素重新计算位置,用新位置存储到新数组中。
-
-
-
-
redis 哈希
-
redis 的哈希碰撞
-
解决方案:
单链法
-
扩容原理:
userd / len(数组) >1 可能扩 >5 肯定扩
第一个大于 userd * 2的 2的n次方 以4为例 2的3次方大于4 则使用2的3次方
rehash -> 渐进式 rehash
-
-
你了解python 字典的实现原理和 redis 的哈希原理吗?
最新推荐文章于 2022-06-12 14:08:00 发布