Java中HashMap和TreeMap的区别


HashMap和TreeMap都被认为是Map类,因为它们都实现了Map接口的职责。Map是一个存储键值对的对象,其中每个键只有一个实例,但值可以有多个实例。HashMap类使用哈希表作为数据结构。TreeMap使用红黑树作为数据存储。

什么是HashMap?

HashMap使用称为哈希表的数据结构来存储映射的键值对。插入键值对时使用键的哈希码。因此,映射中的每个键都必须是唯一的,以便可以检索其值。

由于HashMap不保留插入顺序,因此HashMap对象不会按添加到映射中的顺序返回元素。另一方面,元素返回的顺序在任何时候都不能保证一致。

键只能为null一次,而值可以有多个null值。HashMap可以存储不同类型的对象作为键和值。

如何创建HashMap?

您可以使用以下四种方法之一构造HashMap:

HashMap()
HashMap(Map m)
HashMap(int capacity),
HashMap(int capacity, float fillRatio)
  • HashMap的第一个构造函数创建一个默认为空的对象。

  • 第二个构造函数使用Map“m”的元素初始化HashMap。

  • 第三个构造函数在初始化时将HashMap的容量设置为参数中指定的值。

  • 第四个构造函数将HashMap对象的容量和填充率都设置为其默认值。

  • HashMap的默认大小为16,默认填充率为0.75。如有必要,这两个值都可以更改。

例如:

import java.util.HashMap;
   public class HashMapSample {
      public static void main(String[] args) {
      HashMap map = new HashMap();

      map.put("Today is","Monday");
      map.put("Tomorrow is","Tuesday");
      System.out.println(map);
   }
}

它将产生以下输出:

Today is = Monday
Tomorrow is =Tuesday

什么是TreeMap?

TreeMap是另一种Map类,就像HashMap一样。TreeMap类扩展了AbstractMap类并实现了NavigabelMap和SortedMap接口。

映射的元素以树状结构存储在TreeMap对象中。红黑树是用于存储映射的数据结构。

键值对按排序顺序存储在TreeMap中,这使得可以更快地检索元素。TreeMap对象按排序顺序(升序)返回元素。

如何构造TreeMap?

有四种不同的方法可以构造TreeMap:

TreeMap( )
TreeMap(Comparator<? super K> comp)
TreeMap(Map<? extends K, ? extends V> m)
TreeMap(SortedMap<K, ? extends V> sm)
  • 第一个构造函数将创建一个空的TreeMap对象,并以最有效的方式对它的键进行排序。

  • 第二个构造函数将创建一个空的TreeMap,使用“comp”比较器进行比较和排序。

  • 上面描述的第三个构造函数将创建一个TreeMap,然后使用Map“m”中的条目对其进行初始化。

  • 第四个构造函数将创建一个TreeMap,并使用作为参数传入的SortedMap对象的条目对其进行初始化。

TreeMap本身不包含任何额外的方法;它依赖于NavigableMap和SortedMap接口以及AbstractMap类提供的方法。

例如:

import java.util.TreeMap;
public class TreeMapSample {
   public static void main(String[] args) {
      TreeMap<String,String> map= new TreeMap<String,String>();
      map.put("Today is", "Monday");
      map.put("Tomorrow is", "Tuesday");
      System.out.println(map);
   }
}

HashMap和TreeMap的区别

下表重点介绍了HashMap和TreeMap的主要区别:

比较依据HashMapTreeMap
基础
HashMap不保留插入顺序。
TreeMap保留插入顺序。
实现接口
HashMap实现了Map、Cloneable和Serializable接口。
TreeMap实现了NavigableMap接口,并且可以克隆和序列化。
数据结构
HashMap的基础数据结构是哈希表。
TreeMap的基础数据结构是红黑树。
空键和空值
HashMap中空键可以只用一次,空值可以使用任意多次。
TreeMap不允许使用空键,但允许使用任意多次空值。
继承和实现
HashMap类扩展了AbstractMap类并实现了Map接口。
TreeMap类扩展了AbstractMap类并分别实现了SortedMap和NavigableMap接口。
性能
HashMap操作速度更快。
与HashMap相比,TreeMap的操作速度较慢。
元素顺序
HashMap不保留顺序。
元素按自然顺序(升序)排列。
同构/异构
HashMap支持异构元素,因为它不执行键排序。
由于排序,TreeMap允许同构值作为键。
用途
当我们不需要键值对按排序顺序排列时,应该使用HashMap数据结构。
当我们需要键值对按排序(升序)顺序排列时,应该使用TreeMap。

结论

只有在需要键值对的排序列表时才应该使用TreeMap。排序会带来性能损失。HashMap运行速度更快,因为它是非同步的。

更新于:2022年7月29日

2K+浏览量

启动你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.