06. 哈希表的原理,如何处理冲突,如何删除元素
原理
- 哈希表是一种根据关键字key来访问值value的一种数据结构.
- 将key通过某种运算f(x), 由此得到f(key), 从而索引到数组中的元素value.
- 这种运算f(x)即为hash函数, 通常的做法是将key通过运算后, 对数组长度取模, 得到一个地址空间, 从这个地址空间以O(1)的速度存取value.
哈希冲突
- 不同的key通过hash函数运算, 可能得到相同的索引, 即产生了哈希冲突, 此时可采用开放寻址法和链表法.
- 开放寻址法
当冲突发生时, 按线性顺序, 依次找下一个没有存入元素的空间存放value. - 链表法
当冲突发生时, 将value放入hash(x)所对应的地址空间为链头的链表中, 发生冲突的key一个接一个在该链头下排成一条链.
- 开放寻址法
删除元素
- 开放寻址法不能直接删除元素, 可以将需要删除的元素打上标记, 以表示该元素不存在.
- 链表法可以用链表的删除方法, 如需删除 节点i, 则让 节点i-1 的next指向 节点i+1.