Java 中 TreeMap、HashMap 和 LinkedHashMap 的區別
HashMap、TreeMap 和 LinkedHashMap 都實現了 java.util.Map 介面,它們的特點如下。
HashMap
HashMap 插入和查詢的時間複雜度為 O(1)。
HashMap 允許一個 null 鍵並允許多個 null 值。
HashMap 不維護任何順序。
TreeMap
TreeMap 插入和查詢的時間複雜度為 O(logN)。
TreeMap 不允許 null 鍵,但允許多個 null 值。
TreeMap 維護順序。它有序地以升序儲存鍵。
LinkedHashMap
LinkedHashMap 插入和查詢的時間複雜度為 O(1)。
LinkedHashMap 允許一個 null 鍵並允許多個 null 值。
LinkedHashMap 維護鍵值對的插入順序。
示例
import java.util.HashMap; import java.util.Hashtable; import java.util.LinkedHashMap; import java.util.Map; import java.util.TreeMap; public class Tester { public static void main(String args[]) { Map<String, String> map = new HashMap<String, String>(); map.put("One", "1"); map.put("Five", "5"); map.put("Four", "4"); map.put("Two", "2"); map.put("Three", "3"); System.out.println("HashMap:
" + map); Map<String, String> map1 = new LinkedHashMap<String, String>(); map1.put("One", "1"); map1.put("Five", "5"); map1.put("Four", "4"); map1.put("Two", "2"); map1.put("Three", "3"); System.out.println("LinkedHashMap:
" + map1); Map<String, String> map2 = new TreeMap<String, String>(); map2.put("One", "1"); map2.put("Five", "5"); map2.put("Four", "4"); map2.put("Two", "2"); map2.put("Three", "3"); System.out.println("TreeMap:
" + map2); } }
輸出
HashMap: {Five = 5, One = 1, Four = 4, Two = 2, Three = 3} LinkedHashMap: {One = 1, Five = 5, Four = 4, Two = 2, Three = 3} TreeMap: {Five = 5, Four = 4, One = 1, Three = 3, Two = 2}
這裡你可以看到 HashMap 的鍵是隨機順序的,LinkedHashMap 保持了鍵的插入順序,TreeMap 的鍵是經過排序的。
廣告