hashtable的相关内容

Hashtable和HashMap的区别:
1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。

Hashtable类函数介绍:

此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。

为了成功地在哈希表中存储和检索对象,用作键的对象必须实现 hashCode 方法和 equals 方法。

Hashtable 的实例有两个参数影响其性能:初始容量加载因子容量 是哈希表中 的数量,初始容量 就是哈希表创建时的容量。注意,哈希表的状态为 open:在发生“哈希冲突”的情况下,单个桶会存储多个条目,这些条目必须按顺序搜索。加载因子 是对哈希表在其容量自动增加之前可以达到多满的一个尺度。初始容量和加载因子这两个参数只是对该实现的提示。关于何时以及是否调用 rehash 方法的具体细节则依赖于该实现。

构造方法摘要
Hashtable()
          用默认的初始容量 (11) 和加载因子(0.75)构造一个新的空哈希表。
Hashtable(int initialCapacity)
          用指定初始容量和默认的加载因子(0.75)构造一个新的空哈希表。
Hashtable(int initialCapacity, float loadFactor)
          用指定初始容量和指定加载因子构造一个新的空哈希表。
Hashtable(Map<? extends K,? extends V> t)
          构造一个与给定的 Map 具有相同映射关系的新哈希表。
 
方法摘要
 voidclear()
          将此哈希表清空,使其不包含任何键。
 Objectclone()
          创建此哈希表的浅表复制。
 booleancontains(Object value)
          测试此映射表中是否存在与指定值关联的键。
 booleancontainsKey(Object key)
          测试指定对象是否为此哈希表中的键。
 booleancontainsValue(Object value)
          如果此 Hashtable 将一个或多个键映射到此值,则返回 true。
 Enumeration<V>elements()
          返回此哈希表中的值的枚举。
 Set<Map.Entry<K,V>>entrySet()
          返回此 Hashtable 中所包含的键的 Set 视图。
 booleanequals(Object o)
          按照 Map 接口的定义,比较指定 Object 与此 Map 是否相等。
 Vget(Object key)
          返回此哈希表中指定键所映射到的值。
 inthashCode()
          按照 Map 接口的定义,返回此 Map 的哈希码值。
 booleanisEmpty()
          测试此哈希表是否没有键映射到值。
 Enumeration<K>keys()
          返回此哈希表中的键的枚举。
 Set<K>keySet()
          返回此 Hashtable 中所包含的键的 Set 视图。
 Vput(K key, V value)
          将指定 key 映射到此哈希表中的指定 value
 voidputAll(Map<? extends K,? extends V> t)
          将指定 Map 的所有映射关系复制到此 Hashtable 中,这些映射关系将替换此 Hashtable 拥有的、针对当前指定 Map 中所有键的所有映射关系。
protected  voidrehash()
          增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素。
 Vremove(Object key)
          从哈希表中移除该键及其相应的值。
 intsize()
          返回此哈希表中的键的数量。
 StringtoString()
          返回此 Hashtable 对象的字符串表示形式,其形式为 ASCII 字符 "" (逗号加空格)分隔开的、括在括号中的一组条目。
 Collection<V>values()
          返回此 Hashtable 中所包含值的 Collection 视图。

 

HashtableJava实例

import java.util.*;
/**
 * <p>Title: 哈希表操作</p>
 * <p>Description: 这是一个权限认证的例子,使用了哈希表作为数据的存储</p>
 */
 public class RoleRight
 {
 private static Hashtable rightList = new Hashtable();
/**
 *<br>方法说明:初始化数据
 *<br>输入参数:
 *<br>返回类型:
 */
 public void init()
 {
    String[] accRoleList = {"admin","satrap","manager","user","guest"};
    String[] rightCodeList = {"10001","10011","10021","20011","24011"};
    for(int i=0;i<accRoleList.length;i++)
    {
      rightList.put(accRoleList[i],rightCodeList[i]);
    }
 }
/**
 *<br>方法说明:获取角色权限代码
 *<br>输入参数:String accRole 角色名称
 *<br>返回类型:String 权限代码
 */
 public String getRight(String accRole)
 {
    if(rightList.containsKey(accRole))
      return (String)rightList.get(accRole);
    else
      return null;
 }
/**
 *<br>方法说明:添加角色和代码信息
 *<br>输入参数:String accRole 角色名称
 *<br>输入参数:String rightCode 角色权限代码
 *<br>返回类型:void (无)
 */
 public void insert(String accRole,String rightCode)
 {
   rightList.put(accRole,rightCode);
 }
/**
 *<br>方法说明:删除角色权限
 *<br>输入参数:String accRole 角色名称
 *<br>返回类型:void(无)
 */
 public void delete(String accRole)
 {
   if(rightList.containsKey(accRole))
     rightList.remove(accRole);
 }
/**
 *<br>方法说明:修改角色权限代码
 *<br>输入参数:String accRole 角色名称
 *<br>输入参数:String rightCode 角色权限代码
 *<br>返回类型:void(无)
 */
 public void update(String accRole,String rightCode)
 {
   //this.delete(accRole);
   this.insert(accRole,rightCode);
 }
/**
 *<br>方法说明:打印哈希表中角色和代码对应表
 *<br>输入参数:无
 *<br>返回类型:无
 */
 public void print()
 {
  Enumeration RLKey = rightList.keys();
  while(RLKey.hasMoreElements())
  {
   String accRole = RLKey.nextElement().toString();
   print(accRole+"="+this.getRight(accRole));
  }
 }
/**
 *<br>方法说明:打印信息(过载)
 *<br>输入参数:Object oPara 打印的信息内容
 *<br>返回类型:无
 */
 public void print(Object oPara)
 {
  System.out.println(oPara);
 }
/**
 *<br>方法说明:主方法,
 *<br>输入参数:
 *<br>返回类型:
 */
 public static void main(String[] args)
 {
  RoleRight RR = new RoleRight();
  RR.init();
  RR.print();
  RR.print("___________________________");
  RR.insert("presider","10110");
  RR.print();
  RR.print("___________________________");
  RR.update("presider","10100");
  RR.print();
  RR.print("___________________________");
  RR.delete("presider");
  RR.print();
 }
 }//end:)~

例子中Enumeration介绍

public interface Enumeration<E>

实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement 方法将返回一系列的连续元素。

例如,要输出向量 v 的所有元素,可使用以下方法:

     for (Enumeration e = v.elements() ; e.hasMoreElements() ;) {
         System.out.println(e.nextElement());
}

这些方法主要通过向量的元素、哈希表的键以及哈希表中的值进行枚举。枚举也用于将输入流指定到 SequenceInputStream 中。

注:此接口的功能与 Iterator 接口的功能是重复的。此外,Iterator 接口添加了一个可选的移除操作,并使用较短的方法名。新的实现应该优先考虑使用 Iterator 接口而不是 Enumeration 接口。

摘自:

赛迪网

Java api文档

Java编程100例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值