03_神奇的算列表
其他
2021-01-29 11:09:15
阅读次数: 0
哈希函数引入:
- 有数组和字典,数组取值是用index,而字典取值是用key,而哈希函数类似中转站,映射,将key对应的找到index,所以时间复杂度是O(1).
哈希函数的实现:
- 每一个对象都有属于自己的hashcode,这个hashcode是区分不同对象的重要标识,这个hashcode是一个int型。
index = HashCode(key) % Array.length key=001121时,index = Hashcode('001121') % Array.length = 1420036703 % 8 = 7
哈希冲突
- 写操作时,计算出来的index相同,会发生冲突,解决方法有两种,一种是开放寻址法,另一种是链表法。
- 开放寻址法:写操作时,当遇到冲突,就index往后移动一位,如果移动一位还是冲突,就再移动一位。读操作时,首先计算index,然后比较hashcode,相同就是返回,不相同再往后移动一位再比较,移动一位是种方法,也可以采取其他方法。
- 链表法:首先计算index,发现冲突时,就往该entry往下,(这个地方是链表的往下),取元素也是一样,需要比较hashcode。
扩容
- 为什么当经过多次元素插入,散列表达到一定饱和度时,key映射位置发生冲突的概率会逐渐提高。
- 怎么扩容创建一个新的Entry空数组,长度是原数组的两倍,重新Hash,遍历原Entry数组,把所有的Entry重新Hash到新的数组中。
转载自blog.csdn.net/weixin_42310008/article/details/112845980