参考答案拆解
1. 核心概念解析
哈希碰撞是指不同的键(Key)通过哈希函数计算后得到相同的哈希值,导致它们被映射到哈希表的同一位置。例如:
// 两个不同对象哈希值相同
String key1 = "Aa";
String key2 = "BB";
System.out.println(key1.hashCode()); // 2112
System.out.println(key2.hashCode()); // 2112
2. 主流解决方案详解
(1)开放寻址法
实现方式:
- 线性探测:
index = (hash(key) + i) % capacity
(i=1,2,3…) - 二次探测:
index = (hash(key) + i²) % capacity
- 双重哈希:
index = (hash1(key) + i*hash2(key)) % capacity
代码示例:
// 线性探测实现伪代码
public class LinearProbingHashMap<K,V> {
private Entry<K,V>[] table;
public void put(K key, V value) {
int index = hash(key);
while (table[index]