当前位置:  编程技术>java/j2ee

java hashtable实现代码

    来源: 互联网  发布时间:2014-10-28

    本文导语:  代码如下: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"); ...

代码如下:

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命名空间java.util类hashtable<k,v>的类成员方法: hashtable定义及介绍
  • 请教:请问java中存放数据库中的记录,用什么数据结构?(hashtable?vector?还是别的?)
  • java命名空间java.util类hashtable<k,v>的类成员方法: clear定义及介绍
  • JAVA里哪一个数据结构库(hashtable,vector等)支持一对多的关系?
  • java命名空间java.util类hashtable<k,v>的类成员方法: rehash定义及介绍
  • 浅析java中ArrayList与Vector的区别以及HashMap与Hashtable的区别
  • java命名空间java.util类hashtable<k,v>的类成员方法: tostring定义及介绍
  • 浅析Java中Map与HashMap,Hashtable,HashSet的区别
  • java命名空间java.util类hashtable<k,v>的类成员方法: clone定义及介绍
  • java中vector与hashtable操作实例分享
  • java命名空间java.util类hashtable<k,v>的类成员方法: keys定义及介绍
  • java中Hashtable和HashMap的区别分析
  • java命名空间java.util类hashtable<k,v>的类成员方法: isempty定义及介绍
  • Java中HashMap和Hashtable及HashSet的区别
  • java命名空间java.util类hashtable<k,v>的类成员方法: elements定义及介绍
  • 全面解析java中的hashtable
  • java命名空间java.util类hashtable<k,v>的类成员方法: containsvalue定义及介绍
  • java命名空间java.util类hashtable<k,v>的类成员方法: hashcode定义及介绍
  • java命名空间java.util类hashtable<k,v>的类成员方法: putall定义及介绍
  • java命名空间java.util类hashtable<k,v>的类成员方法: containskey定义及介绍
  • java命名空间java.util类hashtable<k,v>的类成员方法: contains定义及介绍
  • java操作excel2007文档介绍及代码例子
  • 寻找<<java2图形设计卷2SWING>>一书源代码和<<java网络高级编程>>一书源代码
  • java实现判断字符串是否全是数字的四种方法代码举例
  • 怎样将标准的C++代码转换成JAVA代码??
  • java Servlet获取和设置cookie实例代码
  • 哪位会使用代码保护工具WingGuard来保护java代码?
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • Java代码分享工具 Java Gems
  • java Servlet实现Session创建存取以及url重写代码示例
  • 各路JAVA高手们,能否给我一个用JAVA写的简单聊天室代码?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 使用java jdk中的LinkedHashMap实现简单的LRU算法
  • java.util.Date 和 java.slq.Date 如何最简单实现互换?
  • java tomcat实现Session对象的持久化原理及配置方法介绍
  • 不太明白,利用RMI实现JAVA分布式应用 和 EJB实现JAVA分布式应用有什么区别。
  • java序列化实现Serializable接口
  • java的API中有没有既实现了Map接口又实现了List接口的类?
  • java中Spring框架介绍及如何实现对Bean的管理
  • 我是java新手,请问java中与平台相关的操作是怎样实现的
  • 要做一个在applet,实现可以托拽的图形(比如长方形和线段等)?那位高手有资料?或者有没有java的第三方类库实现此功能?
  • java 与 C++ 实现后绑定的方法
  • XUL的Java实现 javaXUL
  • 用JAVA实现与QQ相同的功能!
  • 请问《软件工程java语言实现》一书在那里能下载
  • 如何实现Java下的回调函数!
  • Java实现的XForms Chiba
  • Java的SAMBA客户端实现 jCIFS
  • Lua 实现的 Java 虚拟机 luje
  • yaml 的 java 实现 JYaml
  • java中如何实现打印功能
  • 关于JAVA反射实现的问题
  • Java的CMIS实现 xCMIS
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3