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,
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP