HashMap,LinkedHashMap,TreeMap的有序性

HashMap 其實是一個鏈表的數組。HashMap 的一個功能缺點是它的無序性,被存入到 HashMap 中的元素,在遍歷 HashMap 時,其輸出是無序的。若是但願元素保持輸入的順序,能夠使用 LinkedHashMap 替代。java

LinkedHashMap繼承自HashMap,具備高效性,同時在HashMap的基礎上,又在內部增長了一個鏈表,用以存放元素的順序。LinkedHashMap內部多了一個雙向循環鏈表的維護,該鏈表是有序的,能夠按元素插入順序或元素最近訪問順序(LRU)排列,簡單地說:LinkedHashMap=散列表+循環雙向鏈表數組

LinkedHashMap 是根據元素增長或者訪問的前後順序進行排序,TreeMap 則是基於元素的固有順序 (由 Comparator 或者 Comparable 肯定)。而 TreeMap 則根據元素的 Key 進行排序。spa



public class TreeMapTest { public static void main(String args[]){ Map<String, Integer> hashMap = new HashMap<>(); System.out.println("hashmap結果"); hashMap.put("1", 1); hashMap.put("3", 3); hashMap.put("7", 2); hashMap.put("2", 7); hashMap.put("4", 4); Iterator iterator =hashMap.keySet().iterator(); while (iterator.hasNext()) { Object key= iterator.next(); System.out.println("key: "+key + "值爲:"+hashMap.get(key)); } System.out.println("treeMap結果"); Map<String, Integer> treeMap = new TreeMap(); treeMap.put("1", 1); treeMap.put("3", 3); treeMap.put("7", 2); treeMap.put("2", 7); treeMap.put("4", 4); Iterator iterator1 =treeMap.keySet().iterator(); while (iterator1.hasNext()) { Object key= iterator1.next(); System.out.println("key: "+key + "值爲:"+treeMap.get(key)); } System.out.println("LinkedHashMap結果"); Map linkMap= new LinkedHashMap<>(); linkMap.put("1", 1); linkMap.put("3", 3); linkMap.put("7", 2); linkMap.put("2", 7); linkMap.put("4", 4); Iterator iterator2 =linkMap.keySet().iterator(); while (iterator2.hasNext()) { Object key= iterator2.next(); System.out.println("key: "+key + "值爲:"+linkMap.get(key)); } } }
----------運行結果:-----------
linkMap.put("7", 2); linkMap.put("2", 7); //特地將key的值與value的值不同,看排序是按照key排序仍是value的值排序

hashmap結果 //隨機的,此處看不出來 key: 1值爲:1 key: 2值爲:7 key: 3值爲:3 key: 4值爲:4 key: 7值爲:2 treeMap結果 //能夠看到是按照key值排序的,默認升序 key: 1值爲:1 key: 2值爲:7 key: 3值爲:3 key: 4值爲:4 key: 7值爲:2 LinkedHashMap結果 //按照插入的順序排序 key: 1值爲:1 key: 3值爲:3 key: 7值爲:2 key: 2值爲:7 key: 4值爲:4
相關文章
相關標籤/搜索