Java 中 TreeMap、HashMap 和 LinkedHashMap 之間有什麼區別?


HashSet 和 ArrayList 都是 Java 集合框架中最重要的類之一。

以下是 TreeMap、HashMap 和 LinkedHashMap 之間的重要區別。

序號TreeMapHashMapLinkedHashMap
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,

更新於: 2019-09-18

1K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告