java hashtable实现代码

 更新时间:2013年10月14日 15:09:58   作者:  
这篇文章介绍了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 < 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;
 }
}

相关文章

  • 使用Java实现将ppt转换为文本

    使用Java实现将ppt转换为文本

    这篇文章主要为大家详细介绍了如何使用Java实现将ppt转换为文本,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考下
    2024-01-01
  • java适配器模式之万物拟人化

    java适配器模式之万物拟人化

    本文详细介绍了什么是适配器模式,适配器模式的种类以及各种类的详细讲解等,需要学习该知识点的小伙伴可以参考这篇文章
    2021-08-08
  • 详解在idea 中使用Mybatis Generator逆向工程生成代码

    详解在idea 中使用Mybatis Generator逆向工程生成代码

    这篇文章主要介绍了在idea 中使用Mybatis Generator逆向工程生成代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • java开发flyway的方法

    java开发flyway的方法

    这篇文章主要介绍了java开发flyway的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 使用TraceId在Spring Cloud中实现线上问题快速定位

    使用TraceId在Spring Cloud中实现线上问题快速定位

    在微服务架构中,服务间的互相调用使得问题定位变得复杂,在此背景下,TraceId为我们提供了一个在复杂环境中追踪请求路径和定位问题的工具,本文不仅介绍TraceId的基本概念,还将结合真实场景,为您展示如何在Spring Cloud中应用它
    2023-09-09
  • java使用HashMap实现斗地主(有序版)

    java使用HashMap实现斗地主(有序版)

    这篇文章主要为大家详细介绍了java使用ArrayList实现斗地主游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • Java详解HashMap实现原理和源码分析

    Java详解HashMap实现原理和源码分析

    这篇文章主要介绍了Java关于HashMap的实现原理并进行源码分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 详细总结Java for循环的那些坑

    详细总结Java for循环的那些坑

    在平常写代码的过程中循环是不可避免的,虽然for的语法并不复杂,但是在开发中还是会遇到一些坑,虽然大部分的坑都是自己的骚操作导致的.今天来总结一下for循环在开发中可能遇到的坑,不要在同样的问题上再次犯错.需要的朋友可以参考下
    2021-05-05
  • eclipse中maven插件安装教程

    eclipse中maven插件安装教程

    这篇文章主要为大家详细介绍了eclipse中maven插件安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Java中Stream流对多个字段进行排序的方法

    Java中Stream流对多个字段进行排序的方法

    我们在处理数据的时候经常会需要进行排序后再返回给前端调用,比如按照时间升序排序,前端展示数据就是按时间先后进行排序,下面这篇文章主要给大家介绍了关于Java中Stream流对多个字段进行排序的相关资料,需要的朋友可以参考下
    2023-10-10

最新评论