HashMap,HashTable,TreeMap區別和用法


開始學HashTable,HashMap和TreeMap的時候比較暈,覺得作用差不多,但是到實際運用的時候又發現有許多差別的。需要大家注意,在實際開發中以需求而定。

         java為數據結構中的映射定義了一個接口java.util.Map,而HashMap Hashtable和TreeMap就是它的實現類。Map是將鍵映射到值的對象,一個映射不能包含重復的鍵;每個鍵最多只能映射一個一個值。

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

          Hashtable 與 HashMap類似,但是主要有6點不同。

         1.HashTable的方法是同步的,HashMap未經同步,所以在多線程場合要手動同步HashMap這個區別就像Vector和ArrayList一樣。   

        2.HashTable不允許null值,key和value都不可以,HashMap允許null值,key和value都可以。HashMap允許key值只能由一個null值,因為hashmap如果key值相同,新的key, value將替代舊的。   

        3.HashTable有一個contains(Object value)功能和containsValue(Object value)功能一樣。   

        4.HashTable使用Enumeration,HashMap使用Iterator。   

        5.HashTable中hash數組默認大小是11,增加的方式是 old*2+1。HashMap中hash數組的默認大小是16,而且一定是2的指數。   

        6.哈希值的使用不同,HashTable直接使用對象的hashCode。

        TreeMap能夠把它保存的記錄根據鍵排序,默認是按升序排序,也可以指定排序的比較器,當用Iterator 遍歷TreeMap時,得到的記錄是排過序的。

        下面是HashTable,HashMap和TreeMap總結的一個經典例子。

package com.taobao.luxiaoting;

import java.util.Map;   

import java.util.HashMap;   

import java.util.Set;   

import java.util.HashSet;   

import java.util.Iterator;   

import java.util.Hashtable;   

import java.util.TreeMap;   

class  HashMaps   

{   

       public static void main(String[] args)    

      {   

            Map map=new HashMap();               

            map.put(“a”, “aaa”);   

            map.put(“b”, “bbb”);   

            map.put(“c”, “ccc”);   

            map.put(“d”, “ddd”);   

              

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

            while (iterator.hasNext()) {   

             Object key = iterator.next();   

             System.out.println(“map.get(key) is :”+map.get(key));   

            }         

                               

            Hashtable tab=new Hashtable();               

            tab.put(“a”, “aaa”);   

            tab.put(“b”, “bbb”);   

            tab.put(“c”, “ccc”);   

            tab.put(“d”, “ddd”);   

            Iterator iterator_1 = tab.keySet().iterator();   

            while (iterator_1.hasNext()) {   

             Object key = iterator_1.next();   

             System.out.println(“tab.get(key) is :”+tab.get(key));   

            }            

               

            TreeMap tmp=new TreeMap();               

            tmp.put(“a”, “aaa”);   

            tmp.put(“b”, “bbb”);   

            tmp.put(“c”, “ccc”);   

            tmp.put(“d”, “ddd”);   

            Iterator iterator_2 = tmp.keySet().iterator();   

            while (iterator_2.hasNext()) {   

             Object key = iterator_2.next();   

             System.out.println(“tmp.get(key) is :”+tmp.get(key));   

            }            

        }   

    }   

 

 

結果:

=========map=========
map.get(key) is :ddd
map.get(key) is :bbb
map.get(key) is :ccc
map.get(key) is :aaa
=========Hashtable=========
tab.get(key) is :bbb
tab.get(key) is :aaa
tab.get(key) is :ddd
tab.get(key) is :ccc
=========TreeMap=========
tmp.get(key) is :aaa
tmp.get(key) is :bbb
tmp.get(key) is :ccc
tmp.get(key) is :ddd

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM