国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java hashtable實現代碼

2019-11-26 15:56:54
字體:
來源:轉載
供稿:網友
復制代碼 代碼如下:

public class HashTable{
   private String[] name;    //關鍵字
   private int sum;    //容量
   public static void main(String[] args){    //測試
        HashTable ht = new HashTable();
        ht.add("chenhaitao");
        ht.add("zhongcheng");
        ht.add("baiyudong");
        ht.add("huangshiyao");
        ht.add("djflkd");
        ht.add("gg");
        System.out.println(ht.contains("baiyudong"));
        ht.remove("huangshiyao");
        System.out.println(ht.contains("huangshiyao"));
        ht.print();
   }
  public HashTable(){             //初始化,初始容量是10個
      name = new String[10];
      sum = 0;
  }
  public int hash1(String s){                                       //哈希函數
        return Math.abs(s.hashCode())%name.length;
  }
  public int hash2(String s){                                     //處理沖突的哈希函數
      int result = Math.abs(s.hashCode())%(name.length-1);
      System.out.println(s+"--"+result);
      if(result%2==0){
          return result + 1;
      }
   return result;
  }
  public boolean contains(String s){                  //哈希表里面是否包含字符串s
      int start = hash1(s);
      int i = start;
      while (name[i] != null){
           if(name[i].equals(s)){
               return true;
           }
        i = (i + hash2(s))%name.length;
        if(i == start){
             return false;
        }
      }
   return false;
  }
  public void add(String s){
       if(sum>=name.length/2){
            this.rehash();
       }
      int start = hash1(s);
      int i = start;
     while(name[i] != null){
         if(s.equals(name[i])){
              return;
         }
       i = (i + hash2(s))%name.length;
      if(i == start){
          return;
       }
     }
    name[i] = s;
    sum ++;
  }
   public void rehash(){                              //擴建一個哈希表為原表的兩倍,把原來的哈希表添加到新表中
       HashTable ht = new HashTable();
       ht.name = new String[this.name.length * 2];
       for(int i = 0; i < this.name.length; i ++){
               if((this.name[i] != null)){
                   ht.add(this.name[i]);
              }
       }
     this.name = ht.name;
     this.sum = ht.sum;
   }
  public void remove(String s){                     //刪除某個元素
         if(this.contains(s)){
              int i = this.getValue(s);
              this.name[i] = null;
         }
  }
  public int getValue(String s){                //得到s在哈希表中的位置
    int start = this.hash1(s);
    int i = start;
    while(this.name[i] != null){
       if(this.name[i].equals(s)){
           return i;
       }
     i = (i + this.hash2(s))%this.name.length;
    if(i == start){
      return -1;
     }
   }
  return -1;
  }
  public void print(){                       //輸出哈希表中所有元素
     for(int i = 0; i < name.length; i ++){
        System.out.println(i+":"+name[i]);
    }
  }
public int size(){          //哈希表存儲元素的個數
   return this.sum;
 }
public int length(){            //哈希表的長度
    return this.name.length;
 }
}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临汾市| 那曲县| 交口县| 莆田市| 竹山县| 阜宁县| 石门县| 饶河县| 德江县| 杭锦后旗| 定州市| 鹤庆县| 肃北| 洱源县| 巴林右旗| 旬阳县| 英吉沙县| 吉木萨尔县| 承德县| 瓦房店市| SHOW| 巴林右旗| 徐闻县| 临城县| 郸城县| 景东| 太和县| 瑞丽市| 日喀则市| 景德镇市| 德江县| 邹城市| 洪湖市| 无极县| 高阳县| 亳州市| 丰顺县| 民勤县| 唐山市| 澜沧| 宜兰市|