java数据结构(哈希表)

1.什么是哈希表? 哈希表是一种数据结构,它提供了快速的插入操作和查找操作。其基于数组来实现。 2.哈希化 1)直接将关键字作为索引。 2)将单词转换成索引。 <1>将字母转换成ASCII码,然后进行相加 <2>幂的连乘 <3>压缩可选值 3.压缩后仍然可能出现的问题。 冲突:不能保证每个单词都映射到数组的空白单元。 解决办法: <1>开放地址法 <2>链地址法
Java代码  收藏代码
  1. /** 
  2.  * 员工信息类 
  3.  * @author Administrator 
  4.  * 
  5.  */
  6. public class Info {
  7.     private String key;
  8.     private String name;
  9.     public Info(String key, String name) {
  10.         this.key = key;
  11.         this.name = name;
  12.     }
  13.     public String getKey() {
  14.         return key;
  15.     }
  16.     public void setKey(String key) {
  17.         this.key = key;
  18.     }
  19.     public String getName() {
  20.         return name;
  21.     }
  22.     public void setName(String name) {
  23.         this.name = name;
  24.     }
  25. }
   
Java代码  收藏代码
  1. import java.math.BigInteger;
  2. public class HashTable {
  3.     private Info[] arr;
  4.     /** 
  5.      * 默认的构造方法 
  6.      */
  7.     public HashTable() {
  8.         arr = new Info[100];
  9.     }
  10.     /** 
  11.      * 指定数组初始化大小 
  12.      */
  13.     public HashTable(int maxSize) {
  14.         arr = new Info[maxSize];
  15.     }
  16.     /** 
  17.      * 插入数据 
  18.      */
  19.     public void insert(Info info) {
  20.         arr[hashCode(info.getKey())] = info;
  21.     }
  22.     /** 
  23.      * 查找数据 
  24.      */
  25.     public Info find(String key) {
  26.         return arr[hashCode(key)];
  27.     }
  28.     public int hashCode(String key) {
  29. //      int hashVal = 0; 
  30. //      for(int i = key.length() - 1; i >= 0; i--) { 
  31. //          int letter = key.charAt(i) - 96; 
  32. //          hashVal += letter; 
  33. //      } 
  34. //      return hashVal; 
  35.         BigInteger hashVal = new BigInteger("0");
  36.         BigInteger pow27 = new BigInteger("1");
  37.         for(int i = key.length() - 1; i >= 0; i--) {
  38.             int letter = key.charAt(i) - 96;
  39.             BigInteger letterB = new BigInteger(String.valueOf(letter));
  40.             hashVal = hashVal.add(letterB.multiply(pow27));
  41.             pow27 = pow27.multiply(new BigInteger(String.valueOf(27)));
  42.         }
  43.         return hashVal.mod(new BigInteger(String.valueOf(arr.length))).intValue();
  44.     }
  45. }
   
Java代码  收藏代码
  1. public class TestHashTable {
  2.     public static void main(String[] args) {
  3.         HashTable ht = new HashTable();
  4.         ht.insert(new Info("a","张三"));
  5.         ht.insert(new Info("ct","李四"));
  6.         ht.insert(new Info("wangwu","王五"));
  7.         System.out.println(ht.find("a").getName());
  8.         System.out.println(ht.find("ct").getName());
  9.     }
  10. }
 

爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img