Java中的哈希表Hashtable

哈希表Hashtable的特点:

哈希表即是一种重要的存储方式,也是一种常见的检索方法。基本思想是将(散列码)关键码的值作为自变量,通过一定的函数关系计算出对应的函数值,把这个数值解释为结点的存储地址,将结点存入计算得到存储地址所对应的存储单元。检索时采用检索(散列码)关键码的方法。现在哈希表有一套完整的算法来进行插入、删除和解决冲突。在Java中哈希表用于存储对象,实现快速检索。


1.Java2以前, Hashtable是Dictionary具体的实现 ,Hashtable是原始的java.util的一部分

[java]  view plain copy print ?
  1. public class Hashtable<K,V>  
  2.     extends Dictionary<K,V>  
  3.     implements Map<K,V>, Cloneable, java.io.Serializable

2.Java2以后,由于Java 2 重构的Hashtable实现了Map接口,但是仍然继承Dictionary字典,因此,Hashtable现在集成到了集合框架中

3.Java2以后,HashTable和HashMap类很相似,都实现了Map接口,但是Hashtable是同步的,线程是安全的,在多线程的时候使用Hashtable

4.Java2以后,应为Hashtable是线程安全的,所以速度上就会有所牺牲。比HashMap的速度要慢。

5.Hashtable在哈希表中存储键/值对。键经过哈希处理,所得到的散列码被用作存储在该表中值的索引

6.Hashtable的直接子类是Properties,Properties可以进行与对象属相相关的操作(相关介绍看Properties相关的东西)


Hashtable的四个构造方法。

第一个:

Hashtable()

第二个:

创建指定大小的哈希表

Hashtable(int size)

第三个:

创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例(百分比)

填充比例介于0.0和1.0之间

Hashtable(int size,float fillRatio)

第四个构造方法创建了一个以M中元素为初始化元素的哈希表。

哈希表的容量被设置为M的两倍

Hashtable(Map m)

Hashtable中除了从Map接口中定义的方法外,还定义了以下方法:

序号 方法描述
1 void clear( )
 将此哈希表清空,使其不包含任何键。
2 Object clone( )
创建此哈希表的浅表副本。
3 boolean contains(Object value)
 测试此映射表中是否存在与指定值关联的键。
4 boolean containsKey(Object key)
测试指定对象是否为此哈希表中的键。
5 boolean containsValue(Object value)
如果此 Hashtable 将一个或多个键映射到此值,则返回 true。
6 Enumeration elements( )
返回此哈希表中的值的枚举。
7 Object get(Object key)
 返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 更确切地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null。
8 boolean isEmpty( )
测试此哈希表是否没有键映射到值。
9 Enumeration keys( )
 返回此哈希表中的键的枚举。
10 Object put(Object key, Object value)
将指定 key 映射到此哈希表中的指定 value。
11 void rehash( )
增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素。
12 Object remove(Object key)
从哈希表中移除该键及其相应的值。
13 int size( )
 返回此哈希表中的键的数量。
14 String toString( )
返回此 Hashtable 对象的字符串表示形式,其形式为 ASCII 字符 ", " (逗号加空格)分隔开的、括在括号中的一组条目。

实例:

import java.util.Hashtable;
  import java.util.Enumeration;
  public class HashApp{
   public static void main(String args[]){
      //创建了一个哈希表的对象hash,初始容量为2,装载因子为0.8
    Hashtable hash=new Hashtable(2,(float)0.8);
    hash.put("Jiangsu","Nanjing");
    //将字符串对象“Jiangsu”给定一关键字“Nanjing”,并将它加入hash
    hash.put("Beijing","Beijing");
    hash.put("Zhejiang","Hangzhou");

    System.out.println("The hashtable hash1 is: "+hash);
    System.out.println("The size of this hash table is "+hash.size());
    //打印hash的内容和大小

    Enumeration enum1=hash.elements();
    System.out.print("The element of hash is: ");
    while(enum1.hasMoreElements())
     System.out.print(enum1.nextElement()+" ");
    System.out.println();
    //依次打印hash中的内容
    if(hash.containsKey("Jiangsu"))
     System.out.println("The capatial of Jiangsu is "+hash.get("Jiangsu"));
    hash.remove("Beijing");
    //删除关键字Beijing对应对象
    System.out.println("The hashtable hash2 is: "+hash);
    System.out.println("The size of this hash table is "+hash.size());
   }
  }
运行结果:
  The hashtable hash1 is: {Beijing=Beijing, Zhejiang=Hangzhou, Jiangsu=Nanjing}
  The size of this hash table is 3
  The element of hash is: Beijing Hangzhou Nanjing
  The capatial of Jiangsu is Nanjing
  The hashtable hash2 is: {Zhejiang=Hangzhou, Jiangsu=Nanjing}
  The size of this hash table is 2

上面一部分是我自己写的,另外一部分使用了别人总结的东西,希望能够帮助大家!


如果上面那里有错误,或者大家对某个知识点有更好的认识或解释方法,请在评论里面跟大家分享一下!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值