和HashMap同樣,HashTable 也是一個散列表,它存儲的內容是鍵值對(key-value)映射。
HashTable 繼承於Dictionary,實現了Map、Cloneable、java.io.Serializable接口。
HashTable 的函數都是同步的,這意味着它是線程安全的。它的key、value都不能夠爲null。此外,HashTable中的映射不是有序的。
java
// 是一個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;
// 默認構造函數。 public Hashtable() // 指定「容量大小」的構造函數 public Hashtable(int initialCapacity) // 指定「容量大小」和「加載因子」的構造函數 public Hashtable(int initialCapacity, float loadFactor) // 包含「子Map」的構造函數 public Hashtable(Map t)
// 將此哈希表清空,使其不包含任何鍵。 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<entry<k, v="">> 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()
第一步:根據entrySet()獲取HashTable的「鍵值對」的Set集合。
第二步:經過Iterator迭代器遍歷「第一步」獲得的集合。git
// 假設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(); }
第一步:根據keySet()獲取HashTable的「鍵」的Set集合。
第二步:經過Iterator迭代器遍歷「第一步」獲得的集合。github
// 假設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); }
第一步:根據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(); }
第一步:根據keys()獲取HashTable的集合。
第二步:經過Enumeration遍歷「第一步」獲得的集合。安全
Enumeration enu = table.keys(); while(enu.hasMoreElements()) { System.out.println(enu.nextElement()); }
第一步:根據elements()獲取HashTable的集合。
第二步:經過Enumeration遍歷「第一步」獲得的集合。函數
Enumeration enu = table.elements(); while(enu.hasMoreElements()) { System.out.println(enu.nextElement()); }
PS:本文章相關代碼均已上傳至 GitHub 查看詳情post