03_神奇的算列表

哈希函数引入:

  • 有数组和字典,数组取值是用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