当前位置: 首页 > 图灵资讯 > 技术篇> 哈希表的java实现

哈希表的java实现

来源:图灵教育
时间:2023-05-16 09:18:03

散列表(Hash table,也叫哈希表),是基于关键码值(Key value)直接访问的数据结构。也就是说,它通过将关键代码值映射到表中的一个位置来访问记录,以加快搜索速度。该映射函数称为散列函数,存储记录的数组称为散列表。

/** * 员工信息类 * @author Administrator * */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;}}
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) {arr[hashCode(info.getKey())] = info;}/** * 查找数据 */public Info find(String key) {return arr[hashCode(key)];}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 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());}}