开放地址法哈希表解决冲突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()); } }
相关文章推荐
- 解决哈希表的冲突-开放地址法和链地址法
- 解决哈希表的冲突-开放地址法和链地址法(转)
- 解决哈希表的冲突-开放地址法和链地址法
- 用开放地址法中的线性探查法解决冲突实现哈希表的运算
- 解决哈希表的冲突-开放地址法和链地址法
- 解决哈希表的冲突-开放地址法和链地址法
- 【数据结构】哈希表实现--链地址解决冲突(Java实现)
- C#到Java byte类型冲突的解决
- 用链地址法解决冲突的哈希表
- java调用c# webservice错误记录及解决 server.userexception java.lang.NullPointerException 解决axis与weblogic8的冲突
- 哈希表冲突解决
- 两把利斧解决maven的类包冲突问题 - Spring,企业应用 - Java - ITeye论坛
- 哈希表的简单实现【链地址法解决冲突】
- C#到Java byte类型冲突的解决
- 哈希表,开放地址法之线性探测代码(JAVA)
- 自己写的哈希表以及解决哈希冲突
- java分布式并发唯一键冲突解决总结
- 线性探测再散列解决冲突的哈希表
- 取余数法实现哈希表(包括开放定址法和链地址法解决冲突)
- javamail,java发email,发邮件,jaf,activation,j2ee5冲突问题解决