Java数据结构与算法《十六讲》开放地址法
2017-04-15 23:52
344 查看
什么是开发地址法 当冲突发生时候 通过查找数组的一个空位 并将数据填入 而不再用哈希函数得到的数组的下标 这个方法叫做开放地址法
//员工信息类 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; } } //哈希表 public class HashTable{ private Info[] arr; //默认构造器 public HashTable(){ arr= new Info[100]; } //指定数组初始化大小 public HashTable(in 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; } } //查找数据 public Info find(String key){ int hashVal =hashCode(key); while(arr[hashVal]!=null){ if(arr[hashVal].getKey().equals(key)){ Info temp =arr[hashVal]; temp.setName(null); return temp; } ++hashVal; hashVal %=arr.length; } } 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(); } }
相关文章推荐
- 冒泡排序 Java数据结构与算法
- Java数据结构与算法--高级排序
- Java数据结构与算法之栈和队列
- 【数据结构与算法】二叉树的Java实现及特点总结
- 选择排序 Java数据结构与算法
- Java-数据结构与算法-选择排序与冒泡排序
- Java数据结构与算法(31) - ch13图(拓扑)
- 数据结构和算法设计专题之---二分查找(Java版)
- 【数据结构与算法】汉诺塔算法——java递归实现
- 优先队列的实现 Java数据结构与算法
- java数据结构及算法二
- 自己对java数据结构跟算法的一点理解把
- Java数据结构与算法(26) - ch12堆(堆实现)
- 【数据结构与算法】java链表操作
- 2-3-4 树 Java数据结构与算法
- 数据结构与算法——基数排序简单Java实现
- JAVA数据结构与算法-第二章-数组
- 数据结构与算法——二分查找法(Java实现)
- Java数据结构与算法之排序
- Java数据结构与算法(15) - ch06递归(杨辉三角triangle)