采用压缩可选值后,容易产生相同的hashCode,如a==ct
开放地址法:当冲突发生时,通过依次查找数组的一个空位,将数据填入。
1、插入数据
<pre name="code" class="java"> /*
* 插入数据
*/
public void insert(Info info){
//获得关键字
String key=info.getKey();
//关键字对应的哈希数
int hashVal=hashCode(key);
//如果arr[hashVal]没被占用过,或占用过但已删除
while(arr[hashVal]!=null&&arr[hashVal].getName()!=null){
hashVal++;
hashVal%=arr.length;
}
arr[hashVal]=info;
}
2、查找数据
/*
* 查找数据
*/
public Info find(String key){
int hashVal=hashCode(key);
while(arr[hashVal]!=null){
if(arr[hashVal].getKey().equals(key)){
return arr[hashVal];
}
hashVal++;
hashVal%=arr.length;
}
return null;
}
3、删除数据
/*
* 删除数据
*/
public Info delete(String key){
int hashVal=hashCode(key);
while(arr[hashVal]!=null){
if(arr[hashVal].getKey().equals(key)){
Info tmp=arr[hashVal];
tmp.setName(null); //将name置空
return tmp;
}
hashVal++;
hashVal%=arr.length;
}
return null;
}
缺陷:占用了别人的位置