• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統(tǒng)計

            最新評論

            java中HashMap,LinkedHashMap,TreeMap,HashTable的區(qū)別

            java為數(shù)據(jù)結(jié)構(gòu)中的映射定義了一個接口java.util.Map;它有四個實現(xiàn)類,分別是HashMap Hashtable LinkedHashMap 和TreeMap
            Map主要用于存儲健值對,根據(jù)鍵得到值,因此不允許鍵重復(fù)(重復(fù)了覆蓋了),但允許值重復(fù)。
            Hashmap 是一個最常用的Map,它根據(jù)鍵的HashCode 值存儲數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問速度,遍歷時,取得數(shù)據(jù)的順序是完全隨機的。HashMap最多只允許一條記錄的鍵為Null;允 許多條記錄的值為 Null;HashMap不支持線程的同步,即任一時刻可以有多個線程同時寫HashMap;可能會導(dǎo)致數(shù)據(jù)的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
            Hashtable與 HashMap類似,它繼承自Dictionary類,不同的是:它不允許記錄的鍵或者值為空;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導(dǎo)致了 Hashtable在寫入時會比較慢。
            LinkedHashMap保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先得到的記錄肯定是先插入的.也可以 在構(gòu)造時用帶參數(shù),按照應(yīng)用次數(shù)排序。在遍歷的時候會比HashMap慢,不過有種情況例外,當HashMap容量很大,實際數(shù)據(jù)較少時,遍歷起來可能會 比LinkedHashMap慢,因為LinkedHashMap的遍歷速度只和實際數(shù)據(jù)有關(guān),和容量無關(guān),而HashMap的遍歷速度和他的容量有關(guān)。
            TreeMap實現(xiàn)SortMap接口,能夠把它保存的記錄根據(jù)鍵排序,默認是按鍵值的升序排序,也可以指定排序的比較器,當用Iterator 遍歷TreeMap時,得到的記錄是排過序的。

            一般情況下,我們用的最多的是HashMap,HashMap里面存入的鍵值對在取出的時候是隨機的,它根據(jù)鍵的HashCode值存儲數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問速度。在Map 中插入、刪除和定位元素,HashMap 是最好的選擇。
            TreeMap取出來的是排序后的鍵值對。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會更好。
            LinkedHashMap 是HashMap的一個子類,如果需要輸出的順序和輸入的相同,那么用LinkedHashMap可以實現(xiàn),它還可以按讀取順序來排列,像連接池中可以應(yīng) 用。以下代碼實例可以看出HashMap,LinkedHashMap,TreeMap的區(qū)別:
            Java代碼  收藏代碼
            1. package ceshi;  
            2. import java.util.HashMap;  
            3. import java.util.Iterator;  
            4. import java.util.LinkedHashMap;  
            5. import java.util.Map;  
            6. import java.util.TreeMap;  
            7. public class Ceshi{  
            8. @SuppressWarnings("unchecked")  
            9. public static void main(String[] args) {  
            10.   
            11. //HashMap  
            12. System.out.println("------HashMap無序輸出------");  
            13. HashMap hsMap=new HashMap();  
            14. hsMap.put("3", "Value3");  
            15. hsMap.put("1", "Value1");  
            16. hsMap.put("2", "Value2");  
            17. hsMap.put("b", "ValueB");  
            18. hsMap.put("a", "ValueA");  
            19. Iterator it = hsMap.entrySet().iterator();  
            20. while (it.hasNext()) {  
            21. Map.Entry e = (Map.Entry) it.next();  
            22. System.out.println("Key: " + e.getKey() + "--Value: "  
            23. + e.getValue());  
            24. }  
            25.   
            26. //TreeMap  
            27. System.out.println("------TreeMap按Key排序輸出------");  
            28. TreeMap teMap=new TreeMap();  
            29. teMap.put("3", "Value3");  
            30. teMap.put("1", "Value1");  
            31. teMap.put("2", "Value2");  
            32. teMap.put("b", "ValueB");  
            33. teMap.put("a", "ValueA");  
            34. Iterator tit = teMap.entrySet().iterator();  
            35. while (tit.hasNext()) {  
            36. Map.Entry e = (Map.Entry) tit.next();  
            37. System.out.println("Key: " + e.getKey() + "--Value: "  
            38. + e.getValue());  
            39. }  
            40.   
            41. //LinkedHashMap  
            42. System.out.println("--LinkedHashMap根據(jù)輸入的順序輸出--");  
            43. LinkedHashMap lhsMap=new LinkedHashMap();  
            44. lhsMap.put("3", "Value3");  
            45. lhsMap.put("1", "Value1");  
            46. lhsMap.put("2", "Value2");  
            47. lhsMap.put("b", "ValueB");  
            48. lhsMap.put("a", "ValueA");  
            49. Iterator lit = lhsMap.entrySet().iterator();  
            50. while (lit.hasNext()) {  
            51. Map.Entry e = (Map.Entry) lit.next();  
            52. System.out.println("Key: " + e.getKey() + "--Value: "  
            53. + e.getValue());  
            54. }  
            55. }  
            56.   
            57. }  
            58.   
            59. 執(zhí)行結(jié)果為:  
            60. ------HashMap無序輸出------  
            61. Key: 3--Value: Value3  
            62. Key: 2--Value: Value2  
            63. Key: 1--Value: Value1  
            64. Key: b--Value: ValueB  
            65. Key: a--Value: ValueA  
            66. ------TreeMap按Key排序輸出------  
            67. Key: 1--Value: Value1  
            68. Key: 2--Value: Value2  
            69. Key: 3--Value: Value3  
            70. Key: a--Value: ValueA  
            71. Key: b--Value: ValueB  
            72. --LinkedHashMap根據(jù)輸入的順序輸出--  
            73. Key: 3--Value: Value3  
            74. Key: 1--Value: Value1  
            75. Key: 2--Value: Value2  
            76. Key: b--Value: ValueB  
            77. Key: a--Value: ValueA 

            posted on 2012-08-16 17:57 大龍 閱讀(465) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产精品久久久久乳精品爆| 精品久久人人妻人人做精品| 欧美亚洲国产精品久久| 少妇人妻综合久久中文字幕| 精品多毛少妇人妻AV免费久久| 乱亲女H秽乱长久久久| 国产精品天天影视久久综合网| 99久久精品国产综合一区| 最新久久免费视频| 97久久综合精品久久久综合| 久久香综合精品久久伊人| 久久综合综合久久综合| 久久久午夜精品| 欧美成a人片免费看久久| 亚洲国产成人精品女人久久久 | 久久国产美女免费观看精品| 久久96国产精品久久久| 国产韩国精品一区二区三区久久| 伊人色综合久久天天人手人婷| 久久久亚洲欧洲日产国码是AV| 老男人久久青草av高清| 久久久女人与动物群交毛片| 国产成人精品久久一区二区三区 | 日产精品久久久久久久| 久久亚洲视频| 久久久亚洲AV波多野结衣| 亚洲国产另类久久久精品| 免费精品国产日韩热久久| 免费一级欧美大片久久网| 韩国三级中文字幕hd久久精品| 久久er国产精品免费观看2| 91久久精一区二区三区大全| 久久久精品国产sm调教网站 | 色综合久久久久无码专区| 久久亚洲天堂| www亚洲欲色成人久久精品| AA级片免费看视频久久| 久久人人爽人人爽人人片AV不 | 久久婷婷五月综合色奶水99啪| 色综合久久夜色精品国产| 精品免费tv久久久久久久|