Java中的TreeMap,HashMap和LinkedHashMap有什么区别?

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

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

-
关键TreeMapHashMapLinkedHashMap
1元素顺序

插入到TreeMap中的元素根据其键的自然顺序排序,或者根据使用的构造函数在创建映射时提供的比较器进行排序。

在HashMap的情况下,它不能保证映射的顺序,也不能保证顺序随时间保持不变。

LinkedHashMap遵循元素的插入顺序,并维护插入其中的元素的顺序。

2内部实施TreeMap的内部实现不允许存储空键,但仅允许空值。

在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实现了Collection框架的SortedMap接口,该框架是Map的子级.TreeMap内部实现了Red-Black Tree(自平衡二进制搜索树)。

另一方面,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,