Java 中 TreeMap、HashMap 和 LinkedHashMap 的区别


HashMap、TreeMap 和 LinkedHashMap 都实现了 java.util.Map 接口,其特征如下。

HashMap

  • HashMap 的插入和查找复杂度为 O(1)。

  • HashMap 允许一个空键和多个空值。

  • HashMap 不维护任何顺序。

TreeMap

  • TreeMap 的插入和查找复杂度为 O(logN)。

  • TreeMap 不允许空键,但允许多个空值。

  • TreeMap 维护顺序。它按排序和升序存储键。

LinkedHashMap

  • LinkedHashMap 的插入和查找复杂度为 O(1)。

  • LinkedHashMap 允许一个空键和多个空值。

  • LinkedHashMap 维护键值对插入时的顺序。

示例

import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;

public class Tester {
   public static void main(String args[]) {

      Map<String, String> map = new HashMap<String, String>();
      map.put("One", "1");
      map.put("Five", "5");
      map.put("Four", "4");
      map.put("Two", "2");
      map.put("Three", "3");
      System.out.println("HashMap: 
" + map);       Map<String, String> map1 = new LinkedHashMap<String, String>();       map1.put("One", "1");       map1.put("Five", "5");       map1.put("Four", "4");       map1.put("Two", "2");       map1.put("Three", "3");       System.out.println("LinkedHashMap:
" + map1);       Map<String, String> map2 = new TreeMap<String, String>();       map2.put("One", "1");       map2.put("Five", "5");       map2.put("Four", "4");       map2.put("Two", "2");       map2.put("Three", "3");       System.out.println("TreeMap:
" + map2);    } }

输出

HashMap:
{Five = 5, One = 1, Four = 4, Two = 2, Three = 3}
LinkedHashMap:
{One = 1, Five = 5, Four = 4, Two = 2, Three = 3}
TreeMap:
{Five = 5, Four = 4, One = 1, Three = 3, Two = 2}

在此处,你会看到 HashMap 的键顺序是随机的,LinkedHashMap 仍保留插入键时的顺序,而 TreeMap 的键是按顺序排列的。

更新日期:2020 年 6 月 21 日

12K+ 浏览

开始你的 职业生涯

完成课程后获得认证

开始
广告