微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java hashtable实现代码

这篇文章介绍了java hashtable实现代码,有需要的朋友可以参考一下

复制代码 代码如下:

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                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         System.out.println(i+":"+name[i]);

    }

  }

public int size(){          //哈希表存储元素的个数

   return this.sum;

 }

public int length(){            //哈希表的长度

    return this.name.length;

 }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐