public class HashDetect {
private int mod = 7;
private Entry[] table;
//避免hash聚集,可以令步长为大于1 的整数
private int step = 1;
public void initHashTable(int size){
assert(size > 0);
table = new Entry[size];
mod = size;
}
private int hashCode(Object key){
assert(key != null);
return key.hashCode();
}
public void put(Object key, Object value){
int hCode = hashCode(key) % mod;
int start = hCode;
while(table[hCode] != null){
hCode = (hCode + step) % mod;
if(hCode == start){
break;
}
}
if(table[hCode] == null){
table[hCode] = new Entry(key, value);
}else{
System.out.println("Table is already full.");
}
}
public Object get(Object key){
int hCode = hashCode(key) % mod;
int start = hCode;
while(table[hCode] != null){
//大数据下,hash的性能低下的一个重要原因,equals方法的效率问题
//比如字符串for循环比较
//参考暴雪hash
if(key.equals(table[hCode].key)){
return table[hCode].value;
}else{
hCode = (hCode + step) % mod;
}
if(hCode == start){
break;
}
}
return null;
}
/**
* @param args
*/
public static void main(String[] args) {
}
}hash冲突之线性探测
最新推荐文章于 2025-02-21 00:58:22 发布
本文介绍了一个简单的哈希表实现方法,包括哈希函数的设计、冲突解决策略等关键技术点,并通过具体代码示例展示了如何进行插入和查找操作。
1316

被折叠的 条评论
为什么被折叠?



