Java 中 TreeMap、HashMap 和 LinkedHashMap 之间有什么区别?

java 8object oriented programmingprogramming更新于 2025/11/25 22:04:17

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

以下是 TreeMap、HashMap 和 LinkedHashMap 之间的重要区别。

Sr.不。KeyTreeMapHashMapLinkedHashMap
1元素排序插入 TreeMap 的元素根据其键的自然顺序进行排序,或者根据使用哪个构造函数,由在创建映射时提供的 Comparator 进行排序。对于 HashMap,它不保证映射的顺序,也不保证顺序会随着时间的推移保持不变。LinkedHashMap 遵循元素,并保持插入元素的顺序。
2内部实现TreeMap 的内部实现不允许存储空键,只允许存储空值。在 HashMap 的情况下,允许存储一个空键以及多个空值。LinkedHashmap 的内部实现与 HashMap 更相似,因此允许存储一个空键和多个空值。
3操作复杂性TreeMap 具有 get、put 和 remove 的复杂性操作复杂度为 O(log(n)),大于 HashMap另一方面,HashMap 在执行 get、put 和 remove 操作时,复杂度为 O(1)。LinkedHashMap 的复杂度也与 HashMap 相同,即 O(1)。
4继承TreeMap 实现了 Collection 框架的 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 程序,用于打印
// 使用 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,

相关文章