【Java學習之從頭開始】Java集合-1——HashTable類

1、簡介

和HashMap同樣,HashTable 也是一個散列表,它存儲的內容是鍵值對(key-value)映射。
HashTable 繼承於Dictionary,實現了Map、Cloneable、java.io.Serializable接口。
HashTable 的函數都是同步的,這意味着它是線程安全的。它的key、value都不能夠爲null。此外,HashTable中的映射不是有序的。
java

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<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()

2、HashTable遍歷方式

2.1 遍歷HashTable的鍵值對

第一步:根據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();
    }

2.2 經過Iterator遍歷HashTable的鍵

第一步:根據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);
    }

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 查看詳情post

本文做者: 張未
相關文章
相關標籤/搜索