HashMap 實際上是一個鏈表的數組。HashMap 的一個功能缺點是它的無序性,被存入到 HashMap 中的元素,在遍歷 HashMap 時,其輸出是無序的。如果希望元素保持輸入的順序,可以使用 LinkedHashMap 替代。
LinkedHashMap繼承自HashMap,具有高效性,同時在HashMap的基礎上,又在內部增加了一個鏈表,用以存放元素的順序。LinkedHashMap內部多了一個雙向循環鏈表的維護,該鏈表是有序的,可以按元素插入順序或元素最近訪問順序(LRU)排列,簡單地說:LinkedHashMap=散列表+循環雙向鏈表
LinkedHashMap 是根據元素增加或者訪問的先后順序進行排序,TreeMap 則是基於元素的固有順序 (由 Comparator 或者 Comparable 確定)。而 TreeMap 則根據元素的 Key 進行排序。
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