作为一个易用好使的数据结构 — 字典,与 Java 中 HashMap 一样,充满着设计的哲学。
下面我们就来详细讲述一下 dict 数据结构的底层原理
dict 底层数据结构就是一个哈希表。默认初始容量为8,负载因子为 2 / 3 2/3 2/3。
先根据hash函数计算插入元素的hash值,看是否发生冲突,如果没有发生冲突,则直接插入,否则,当发生冲突时,不断寻找周围是否有空的 bucket,当发现空的bucket时,将其放入(开放寻址法)。
有三种方法可用于开发寻址法
通过hash函数求出元素对应的hash值,对比对应位置的元素是否与我们要查找的元素相同,相同则已找到,停止查找。否则就顺序向后不断查找,如果还没有查找到该元素,就说明没有在该dict中。
删除过程不能直接删除元素,可以将删除的标记为被删除。当进行元素查找时,遇到被设为标记的位置,不停下来,而是继续向下探测下去。
不直接删除的原因是:当直接删除时,在下一次查找时,通过现性探测法,找到空闲位置,我们可以认为 dict 中不存在这个元素,倘若这个空闲位置是我们后来删除了的,就会引发查找的问题,当设一个标记之后,检测到这个位置的标记,就会继续查找下去,直到查到元素,否则,就是 dict 中没有该元素。
dict 默认初始容量为8,扩容时候要求是2的指数次方,负载因子为 2 / 3 2/3 2/3,当空间使用量超过了负载因子时,需要进行扩容,否则后续发生冲突的概率就很大。