hashtable是由数组和列表两种数据结构组合而成的,这里面有两个重要的知识点需要掌握,一个是如何对哈希表进行动态扩容,第二个如何巧妙的设计一个散列性和性能都非常好的散列函数。
数组的动态扩容策略
已java的 hashmap
为例,它的初始长度是16,默认阀值为0.75,当存储长度达到了长度的3/4时,就会触发扩容动作,扩容的长度为2的整数次幂,这是因为2的整数次幂的数据减1转为二进制,低位都是1,在与hashcode随机出来的数转为二进制做与运算,其结果范围一定是0-hashcode之间的范围,不会越界。
1 |
|
散列函数
好的散列函数不但要保证计算速度快,还要保证散列性好,避免过多的碰撞,扰动函数的逻辑是将二进制数据右位移16位,正好是32bit的一半,然后自己的高半区和低半区做异或,就是为了混合原始哈希码的高位和低位,以此来加大低位的随机性。而且混合后的低位掺杂了高位的部分特征,这样高位的信息也被变相保留下来。
- 本文作者: 李宏伟
- 本文链接: https://blog.chuangketime.com/2023/03/23/数据结构-哈希表/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!