HashMap、HashTable、LinkedHashMap和TreeMap

Java爲數據結構中的映射定義了一個接口java.util.Map,它有四個實現類,分別是HashMapHashTableLinkedHashMapTreeMap。本節實例主要介紹這4中實例的用法和區別。

關鍵技術剖析:

Map用於存儲鍵值對,根據鍵得到值,因此不允許鍵重複,值可以重複。

l  1HashMap是一個最常用的Map,它根據鍵的hashCode值存儲數據,根據鍵可以直接獲取它的值,具有很快的訪問速度。HashMap最多隻允許一條記錄的鍵爲null,允許多條記錄的值爲nullHashMap不支持線程的同步,即任一時刻可以有多個線程同時寫HashMap,可能會導致數據的不一致。如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。

l  2HashtableHashMap類似,不同的是:它不允許記錄的鍵或者值爲空;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,然而,這也導致了Hashtable在寫入時會比較慢。

l  3LinkedHashMap保存了記錄的插入順序,在用Iteraor遍歷LinkedHashMap時,先得到的記錄肯定是先插入的。在遍歷的時候會比HashMap慢。有HashMap的全部特性。

l  4TreeMap能夠把它保存的記錄根據鍵排序,默認是按升序排序,也可以指定排序的比較器。當用Iteraor遍歷TreeMap時,得到的記錄是排過序的。TreeMap的鍵和值都不能爲空。


遍歷Map有兩種方法:

1mapkeySet()方法獲得鍵的集合,再調用鍵集合的iterator方法獲得鍵的迭代器,以此迭代地取出Map中的鍵,用get方法獲得鍵對應的值,便完成了Map的遍歷。代碼如下所示:

//使用迭代器遍歷Map的鍵,根據鍵取值

        Iterator it = map.keySet().iterator();

        while (it.hasNext()){

           key = it.next();

           value = map.get(key);

           System.out.println("key: " + key + "; value: " + value );

        }

2)使用MapentrySet方法獲得Map中記錄的集合,每條對象都是一個Map.Entry對象,使用其getKey方法獲得記錄的鍵,使用其getValue方法獲得記錄的值。代碼如下所示:

        //或者使用迭代器遍歷Map的記錄Map.Entry

        Map.Entry entry = null;

        it = map.entrySet().iterator();

        while (it.hasNext()){

           //一個Map.Entry代表一條記錄

           entry = (Map.Entry)it.next();

           //通過entry可以獲得記錄的鍵和值

           //System.out.println("key: " + entry.getKey() + "; value: " + entry.getValue());

(3)遍歷hashtable可以用Enumeration接口

Hashtable<String, String> hashtable_new=new Hashtable<String, String>();
 for(int i=0;i<10;i++){
 hashtable_new.put(i+"", i+"0");
 }
Enumeration<String> enumeration1=hashtable_new.keys();
while (enumeration1.hasMoreElements()) {
String string = (String) enumeration1.nextElement();
System.out.println(string);
}

發佈了20 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章