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+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告