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的主要区别:
| 比较依据 | HashMap | TreeMap |
|---|---|---|
| 基础 | 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运行速度更快,因为它是非同步的。
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP