<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    HashMap、Hashtable、LinkedHashMap和TreeMap

    Posted on 2009-05-31 00:13 啥都寫點 閱讀(1657) 評論(0)  編輯  收藏 所屬分類: J2SE
    關鍵技術:
    • HashMap是一個最常用的Map,它根據鍵的hashCode值存儲數據,根據鍵可以直接獲取它的值,具有很快的訪問速度。HashMap最多只允許一條記錄的鍵為NULL,允許多條記錄的值為NULL。HashMap不支持線程同步,即任一時刻可以有多個線程同時寫HashMap,可能會導致數據的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。
    • Hashtable與HashMap類似,不同的是:它不允許記錄的鍵或者值為空;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導致了Hashtable在寫入時會比較慢。
    • LinkedHashMap保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先得到的記錄肯定是先插入的。在遍歷的時候會比HashMap慢
    • TreeMap能夠把它保存的記錄根據鍵排序,默認是按升序排序,也可以指定排序的比較器。當用Iterator遍歷TreeMap時,得到的記錄是排過序的。

    package book.arrayset;

    import java.util.HashMap;
    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.Map;
    import java.util.TreeMap;

    /**
     * 演示各個Map的實現類
     
    */
    public class TestMap {
        
        
    /**
         * 初始化一個Map
         * 
    @param map
         
    */
        
    public static void init(Map map){
            
    if (map != null){
                String key 
    = null;
                
    for (int i=5; i>0; i--){
                    key 
    = new Integer(i).toString() + ".0";
                    map.put(key, key.toString());
                    
    //Map中的鍵是不重復的,如果插入兩個鍵值一樣的記錄,
                    
    //那么后插入的記錄會覆蓋先插入的記錄
                    map.put(key, key.toString() + "0");            }
            }
        }
        
    /**
         * 輸出一個Map
         * 
    @param map
         
    */
        
    public static void output(Map map){
            
    if (map != null){
                Object key 
    = null;
                Object value 
    = null;
                
    //使用迭代器遍歷Map的鍵,根據鍵取值
                Iterator it = map.keySet().iterator();
                
    while (it.hasNext()){
                    key 
    = it.next();
                    value 
    = map.get(key);
                    System.out.println(
    "key: " + key + "; value: " + value );
                }
                
    //或者使用迭代器遍歷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());
                }
            }
        }
        
    /**
         * 判斷map是否包含某個鍵
         * 
    @param map
         * 
    @param key
         * 
    @return
         
    */
        
    public static boolean containsKey(Map map, Object key){
            
    if (map != null){
                
    return map.containsKey(key);
            }
            
    return false;
        }
        
    /**
         * 判斷map是否包含某個值
         * 
    @param map
         * 
    @param value
         * 
    @return
         
    */
        
    public static boolean containsValue(Map map, Object value){
            
    if (map != null){
                
    return map.containsValue(value);
            }
            
    return false;
        }
        
    /**
         * 演示HashMap
         
    */
        
    public static void testHashMap(){
            Map myMap 
    = new HashMap();
            init(myMap);
            
    //HashMap的鍵可以為null
            myMap.put(null,"ddd");
            
    //HashMap的值可以為null
            myMap.put("aaa"null);
            output(myMap);
        }
        
    /**
         * 演示Hashtable
         
    */
        
    public static void testHashtable(){
            Map myMap 
    = new Hashtable();
            init(myMap);
            
    //Hashtable的鍵不能為null
            
    //myMap.put(null,"ddd");
            
    //Hashtable的值不能為null
            
    //myMap.put("aaa", null);
            output(myMap);
        }
        
    /**
         * 演示LinkedHashMap
         
    */
        
    public static void testLinkedHashMap(){
            Map myMap 
    = new LinkedHashMap();
            init(myMap);
            
    //LinkedHashMap的鍵可以為null
            myMap.put(null,"ddd");
            
    //LinkedHashMap的值可以為null
            myMap.put("aaa"null);
            output(myMap);
        }
        
    /**
         * 演示TreeMap
         
    */
        
    public static void testTreeMap(){
            Map myMap 
    = new TreeMap();
            init(myMap);
            
    //TreeMap的鍵不能為null
            
    //myMap.put(null,"ddd");
            
    //TreeMap的值不能為null
            
    //myMap.put("aaa", null);
            output(myMap);
        }

        
    public static void main(String[] args) {
            System.out.println(
    "采用HashMap");
            TestMap.testHashMap();
            System.out.println(
    "采用Hashtable");
            TestMap.testHashtable();
            System.out.println(
    "采用LinkedHashMap");
            TestMap.testLinkedHashMap();
            System.out.println(
    "采用TreeMap");
            TestMap.testTreeMap();
            
            Map myMap 
    = new HashMap();
            TestMap.init(myMap);
            System.out.println(
    "新初始化一個Map: myMap");
            TestMap.output(myMap);
            
    //清空Map
            myMap.clear();
            System.out.println(
    "將myMap clear后,myMap空了么?  " + myMap.isEmpty());
            TestMap.output(myMap);
            myMap.put(
    "aaa""aaaa");
            myMap.put(
    "bbb""bbbb");
            
    //判斷Map是否包含某鍵或者某值
            System.out.println("myMap包含鍵aaa?  "+ TestMap.containsKey(myMap, "aaa"));
            System.out.println(
    "myMap包含值aaaa?  "+ TestMap.containsValue(myMap, "aaaa"));
            
    //根據鍵刪除Map中的記錄
            myMap.remove("aaa");
            System.out.println(
    "刪除鍵aaa后,myMap包含鍵aaa?  "+ TestMap.containsKey(myMap, "aaa"));
            
    //獲取Map的記錄數
            System.out.println("myMap包含的記錄數:  " + myMap.size());
        }
        
    /**
         * Map用于存儲鍵值對,不允許鍵重復,值可以重復。
         * (1)HashMap是一個最常用的Map,它根據鍵的hashCode值存儲數據,根據鍵可以直接獲取它的值,具有很快的訪問速度。
         * HashMap最多只允許一條記錄的鍵為null,允許多條記錄的值為null。
         * HashMap不支持線程的同步,即任一時刻可以有多個線程同時寫HashMap,可能會導致數據的不一致。
         * 如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。
         * (2)Hashtable與HashMap類似,不同的是:它不允許記錄的鍵或者值為空;
         * 它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,然而,這也導致了Hashtable在寫入時會比較慢。
         * (3)LinkedHashMap保存了記錄的插入順序,在用Iteraor遍歷LinkedHashMap時,先得到的記錄肯定是先插入的。
         * 在遍歷的時候會比HashMap慢。
         * (4)TreeMap能夠把它保存的記錄根據鍵排序,默認是按升序排序,也可以指定排序的比較器。當用Iteraor遍歷TreeMap時,
         * 得到的記錄是排過序的。
         
    */
    }



                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 久久久久成人片免费观看蜜芽| 一级毛片a免费播放王色电影| 99xxoo视频在线永久免费观看| 亚洲熟妇无码八AV在线播放| 成年免费大片黄在线观看com| 亚洲国模精品一区| 日本一区二区三区免费高清在线| 又粗又硬免费毛片| 国产成人综合久久精品亚洲| 免费在线看片网站| 国产免费内射又粗又爽密桃视频| 成人午夜亚洲精品无码网站| baoyu116.永久免费视频| 亚洲精品无码高潮喷水在线| 全免费a级毛片免费看| 亚洲人成电影福利在线播放| 黄页网站在线看免费| 亚洲欧美日本韩国| 亚洲精品视频在线看| 水蜜桃视频在线观看免费播放高清| 亚洲一区二区影院| 在线天堂免费观看.WWW| 色www免费视频| 精品亚洲一区二区| 在线a级毛片免费视频| 狼色精品人妻在线视频免费| 久久亚洲欧洲国产综合| 99在线观看视频免费| 亚洲精品自偷自拍无码| 亚洲伊人久久成综合人影院| 99视频在线精品免费| 亚洲av无码专区在线观看下载| 亚洲午夜久久久影院伊人 | 亚洲国产成AV人天堂无码| 97在线观免费视频观看| 免费无码一区二区| 久久久久亚洲AV无码网站| 日韩在线看片免费人成视频播放| 特级做A爰片毛片免费看无码| 亚洲 欧洲 自拍 另类 校园| 亚洲精品无码Av人在线观看国产|