
本文是学习李智慧在极客时间的《后端技术面试38讲》课程内容的收获
这个问题看起来是对哈希表这一数据结构的理解,但其实是对其实现方式所使用的基本知识的理解,很好的反映了新技术都是建立在基础技术上这一理念。
标准答案 Hash表对外暴露的功能是通过Key值,在O(1)的时间复杂度内找到对应的Value(Key是去重的)。对应的唯一性是通过
步骤1的时间复杂度是hash函数保证,重要的是步骤二的时间复杂度也要为O(1),我知道的就是Hash表维护一个一维数组,通过将Hash值对数组长度取余,得到一个[0, 数组长度)的范围值,正好对应数组下标,通过数组下标可以在O(1)的时间复杂度内得到Value。会有取余后下标相同的情况,Value跟在之前的Value后面,遍历找到对应的元素。数组元素就变为链表首地址
从基础知识推理Hash的实现这是一个 1 + 1 > 2的过程,面试碰到这一题如果能推出来真的是天才。但是这个分析过程帮助我们更能理解基础知识
利用Hash值取余的话,极端情况下会退化成一张链表,通过Key查找一个Value时间复杂度就变为O(n)(步骤1-3的时间复杂度不变,最后遍历查找链表的时间为O(n))。要保证Hash表的时间复杂度,就是