Java 中 TreeMap、HashMap 和 LinkedHashMap 之間有什麼區別?
HashSet 和 ArrayList 都是 Java 集合框架中最重要的類之一。
以下是 TreeMap、HashMap 和 LinkedHashMap 之間的重要區別。
序號 | 鍵 | TreeMap | HashMap | LinkedHashMap |
---|---|---|---|---|
1 | 元素順序 | 插入到 TreeMap 中的元素根據其鍵的自然順序排序,或者根據在對映建立時提供的 Comparator 排序,具體取決於使用哪個建構函式。 | 對於 HashMap,它不保證對映的順序,也不保證順序會隨著時間的推移保持不變。 | LinkedHashMap 遵循元素的插入順序,並維護插入到其中的元素的順序。 |
2 | 內部實現 | TreeMap 的內部實現不允許儲存 null 鍵,但僅允許 null 值。 | 對於 HashMap,允許儲存一個 null 鍵以及多個 null 值。 | LinkedHashmap 在內部實現方面更類似於 HashMap,因此允許儲存一個 null 鍵和多個 null 值。 |
3 | 操作複雜度 | TreeMap 的 get、put 和 remove 操作的複雜度為 O(log(n)),這大於 HashMap。 | 另一方面,HashMap 在其 get、put 和 remove 操作的情況下複雜度為 O(1)。 | LinkedHashMap 的複雜度與 HashMap 相同,即 O(1)。 |
4 | 繼承 | TreeMap 實現集合框架的 SortedMap 介面,它是 Map 的子介面。在內部,TreeMap 實現紅黑樹(一種自平衡二叉搜尋樹)。 | 另一方面,HashMap 實現簡單的 Map 介面,並在內部使用雜湊來儲存和檢索其元素。 | 與 TreeMap 類似,LinkedHashMap 擴充套件 HashMap,並在內部使用雜湊,就像在 HashMap 中一樣。 |
5 | 索引效能 | TreeMap 維護其元素的順序,因此索引效能較低,並且需要的記憶體也比 HashMap 和 LinkedHashMap 多。 | HashMap 不維護任何元素的插入順序,因此與 TreeMap 相比速度更快,並且不根據其值對元素進行排序,因此也比 LinkedHashMap 快。 | LinkedHashMap 比 TreeMap 快,但比 HashMap 慢。 |
6 | 比較 | TreeMap 中的元素透過使用 compareTo() 方法進行比較,其中也可以提供自定義實現。 | 另一方面,HashMap 使用 Object 類的 compare() 方法來比較其元素。 | LinkedHashMap 也使用 Object 類的 compare() 方法來比較其元素。 |
TreeMap 與 HashMap 與 LinkedHashMap 的示例
JavaTester.java
// Java program to print ordering // of all elements using HashMap import java.util.*; import java.lang.*; import java.io.*; public class JavaTester{ static void getAndShow(AbstractMap map){ int[] input= {1, -1, 0, 2,-2}; for (int x: input){ map.put(x, Integer.toString(x)); } Set<Integer> keySet = map.keySet(); for (int k: keySet){ System.out.print(k + ", "); } } public static void main (String[] args){ HashMap map = new HashMap(); getAndShow(map); LinkedHashMap map1 = new LinkedHashMap(); getAndShow(map1); TreeMap map2 = new TreeMap(); getAndShow(map2); } }
輸出
-1, 0, 1, -2, 2, 1, -1, 0, 2, -2, -2, -1, 0, 1, 2,
廣告