📜  Java中的HashMap和TreeMap(1)

📅  最后修改于: 2023-12-03 14:42:54.472000             🧑  作者: Mango

Java中的HashMap和TreeMap

Java中的HashMap和TreeMap都是实现了Java集合框架中的Map接口的类。它们都提供了存储键值对的功能,但是在底层实现和性能方面有所不同。

HashMap

HashMap是基于哈希表的实现。它使用哈希函数将键映射到存储桶中,然后在桶中搜索给定的键。HashMap的查询操作通常是O(1)的常数时间复杂度。

在默认情况下,HashMap初始容量为16,负载因子为0.75,即当HashMap中的元素个数达到容量与负载因子的乘积时,就需要调整HashMap的大小以避免过多的冲突。调整大小涉及到重新哈希现有元素,因此可能会对性能造成一定的影响。

HashMap中的键和值可以为null,但是由于键是不能重复的,当键为null时只能有一个条目。

以下是一个使用HashMap的简单示例:

Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
System.out.println(map.get("apple")); // 输出1
TreeMap

TreeMap是基于红黑树的实现。它使用二叉搜索树来存储键值对,因此键必须是可比较的。根据Comparable或者Comparator接口来进行排序,因此元素被存储后会自动排序。TreeMap的查询操作通常是O(log n)的对数时间复杂度。

TreeMap的默认排序顺序是键的自然顺序,也可以通过指定Comparator来使用自定义排序。

与HashMap类似,TreeMap也有初始容量和负载因子的概念,但是由于它是基于红黑树实现的,所以调整大小不会像HashMap那样涉及到重新哈希,因此对性能的影响会比HashMap小一些。

以下是一个使用TreeMap的简单示例:

Map<String, Integer> map = new TreeMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
System.out.println(map.get("banana")); // 输出2
总结

HashMap和TreeMap都是实现了Java集合框架中的Map接口的类,它们都提供了存储键值对的功能。HashMap是基于哈希表的实现,查询操作通常是O(1)的常数时间复杂度;TreeMap是基于红黑树的实现,查询操作通常是O(log n)的对数时间复杂度。HashMap适用于快速的查找、插入和删除操作,而TreeMap适用于从有序键集合中查找元素或对元素进行排序。要选择使用哪个类,应根据具体的情况来决定。