一、简介
和HashMap一样,HashTable 也是一个散列表,它存储的内容是键值对(key-value)映射。
HashTable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。HashTable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。此外,HashTable中的映射不是有序的。1.1 成员变量
// 是一个Entry[]数组类型,而Entry实际上就是一个单向链表。哈希表的"key-value键值对"都是存储在Entry数组中的。 private transient Entry[] table; // 是Hashtable的大小,它是Hashtable保存的键值对的数量。 private transient int count; // 是Hashtable的阈值,用于判断是否需要调整Hashtable的容量。threshold的值="容量*加载因子"。 private int threshold; // 就是加载因子。 private float loadFactor; // 是用来实现fail-fast机制的 private transient int modCount = 0;
1.2 构造函数
// 默认构造函数。 public Hashtable() // 指定“容量大小”的构造函数 public Hashtable(int initialCapacity) // 指定“容量大小”和“加载因子”的构造函数 public Hashtable(int initialCapacity, float loadFactor) // 包含“子Map”的构造函数 public Hashtable(Map t)
1.3 常用API
// 将此哈希表清空,使其不包含任何键。 synchronized void clear() synchronized Object clone() // 测试此映射表中是否存在与指定值关联的键。 boolean contains(Object value) // 测试指定对象是否为此哈希表中的键。 synchronized boolean containsKey(Object key) // 如果此 Hashtable 将一个或多个键映射到此值,则返回 true。 synchronized boolean containsValue(Object value) synchronized Enumeration elements() synchronized Set> entrySet() synchronized boolean equals(Object object) synchronized V get(Object key) synchronized int hashCode() synchronized boolean isEmpty() synchronized Set keySet() synchronized Enumeration keys() synchronized V put(K key, V value) synchronized void putAll(Map map) synchronized V remove(Object key) synchronized int size() synchronized String toString() synchronized Collection values() // 增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素。 protected void rehash()
二、HashTable遍历方式
2.1 遍历HashTable的键值对
第一步:根据entrySet()获取HashTable的“键值对”的Set集合。
第二步:通过Iterator迭代器遍历“第一步”得到的集合。// 假设table是Hashtable对象 // table中的key是String类型,value是Integer类型 Integer integ = null; Iterator iter = table.entrySet().iterator(); while(iter.hasNext()) { Map.Entry entry = (Map.Entry)iter.next(); // 获取key key = (String)entry.getKey(); // 获取value integ = (Integer)entry.getValue(); }
2.2 通过Iterator遍历HashTable的键
第一步:根据keySet()获取HashTable的“键”的Set集合。
第二步:通过Iterator迭代器遍历“第一步”得到的集合。// 假设table是Hashtable对象 // table中的key是String类型,value是Integer类型 String key = null; Integer integ = null; Iterator iter = table.keySet().iterator(); while (iter.hasNext()) { // 获取key key = (String)iter.next(); // 根据key,获取value integ = (Integer)table.get(key); }
2.3 通过Iterator遍历HashTable的值
第一步:根据value()获取HashTable的“值”的集合。
第二步:通过Iterator迭代器遍历“第一步”得到的集合。// 假设table是HashTable对象 // table中的key是String类型,value是Integer类型 Integer value = null; Collection c = table.values(); Iterator iter= c.iterator(); while (iter.hasNext()) { value = (Integer)iter.next(); }
2.4 通过Enumeration遍历HashTable的键
第一步:根据keys()获取HashTable的集合。
第二步:通过Enumeration遍历“第一步”得到的集合。Enumeration enu = table.keys(); while(enu.hasMoreElements()) { System.out.println(enu.nextElement()); }
2.5 通过Enumeration遍历HashTable的值
第一步:根据elements()获取HashTable的集合。
第二步:通过Enumeration遍历“第一步”得到的集合。Enumeration enu = table.elements(); while(enu.hasMoreElements()) { System.out.println(enu.nextElement()); }
PS:本文章相关代码均已上传至 GitHub
本文链接:
版权声明: 本博客所有文章除特别声明外,均采用 许可协议。转载请注明出处!