您的位置:首页 > 编程语言 > Java开发

开放地址法哈希表解决冲突java

2015-02-10 15:25 309 查看
package ch16;

import java.math.BigInteger;

public class HashTable {
private Info[] arr;

/**
* 默认的构造方法
*/
public HashTable() {
arr = new Info[100];
}

/**
* 指定数组初始化大小
*/
public HashTable(int maxSize) {
arr = new Info[maxSize];
}

/**
* 插入数据
*/
public void insert(Info info) {
//获得关键字
String key = info.getKey();
//关键字所自定的哈希数
int hashVal = hashCode(key);
while(arr[hashVal] != null && arr[hashVal].getName() != null){
++hashVal;
hashVal %=arr.length;
}

arr[hashVal] = info;
}

/**
* 查找数据
*/
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;
}

public int hashCode(String key) {
//		int hashVal = 0;
//		for(int i = key.length() - 1; i >= 0; i--) {
//			int letter = key.charAt(i) - 96;
//			hashVal += letter;
//		}
//		return hashVal;

BigInteger hashVal = new BigInteger("0");
BigInteger pow27 = new BigInteger("1");
for(int i = key.length() - 1; i >= 0; i--) {
int letter = key.charAt(i) - 96;
BigInteger letterB = new BigInteger(String.valueOf(letter));
hashVal = hashVal.add(letterB.multiply(pow27));
pow27 = pow27.multiply(new BigInteger(String.valueOf(27)));
}
return hashVal.mod(new BigInteger(String.valueOf(arr.length))).intValue();
}

public Info delete(String key){
int hashVal = hashCode(key);
while(arr[hashVal] != null){
if(arr[hashVal].getKey().equals(key)){
Info tmp = arr[hashVal];
//删除之前就设置name为null
tmp.setName(null);
return tmp;
}
++hashVal;
hashVal %= arr.length;

}

return null;

}

}
=====================
package ch16;

public class Info {

private String   key;
private String name;

public Info(String key,String name){
this.key = key;
this.name = name;
}

public String getKey() {
return key;
}

public void setKey(String key) {
this.key = key;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}
========================
package ch16;

public class TestHashTable {

public static void main(String[] args) {
HashTable ht = new HashTable();
ht.insert(new Info("a","张三"));
ht.insert(new Info("ct","李四"));
ht.insert(new Info("wangwu","王五"));

System.out.println(ht.find("a").getName());
System.out.println(ht.find("ct").getName());

}

}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: