哈希表是一种通过哈希函数将数据映射到数组中的数据结构。
1.当两个或多个键映射到数组的同一个位置时,就发生了哈希冲突,解决哈希冲突常见的有以下几种方式:
1.1. 开放地址法
开放地址法是一种解决哈希冲突的方法,它通过从冲突的哈希表位置开始顺序探查哈希表,直到找到一个空槽位为止。具体来说,包括线性探测、二次探测、双重哈希等方式。
例如,假设有一组键值对,其中键值为 5,17,13,1,11,7,19,6。使用线性探测法解决哈希冲突时,将键值 5 存储到散列表中,发现 17 的哈希位置也是 0,就将它存储在 1 的位置,同样发现 13 的位置也已经被占用,就将它存储在 2 的位置,以此类推,直到所有的键值都被处理完毕。
1.2. 拉链法
拉链法是一种解决哈希冲突的方法,它将哈希表每个位置都指向一个链表,相同哈希值的键值对会被插入到链表的同一位置中。
例如,假设有一组键值对,其中键值为 5,17,13,1,11,7,19,6。使用拉链法解决哈希冲突时,将键值 5 存储到散列表中,发现 17 的哈希位置也是 0,就将它插入到与 5 相同链表中的下一个位置,以此类推,直到所有的键值都被处理完毕。
1.3. 建立公共溢出区
公共溢出区是一种解决哈希冲突的方法,它将所有发生哈希冲突的键值对都存储在一个公共的溢出区中,而不是存储到哈希表中。
例如,假设有一组键值对,其中键值为 5,17,13,1,11,7,19,6。使用公共溢出区解决哈希冲突时,将键值 5 存储到散列表中,发现 17 的哈希位置也是 0,就将它存储到公共溢出区中,以此类推,直到所有的键值都被处理完毕。