TreeMap 是 Java 中的一种有序映射(SortedMap)实现,它根据键的自然顺序进行排序,或者根据自定义的 Comparator 进行排序。TreeMap 的底层实现是红黑树(Red-Black Tree),这使得它的插入、删除和搜索操作的时间复杂度为 O(log n)。
一、特点:
1. TreeMap是有序的,根据键的顺序进行排序,默认是按照键的自然顺序进行排序,也可以使用自定义的Comparator来进行排序。
2. TreeMap不允许键为null,但允许值为null。
3. TreeMap是非同步的,不是线程安全的。
二、使用方法:
1. 创建TreeMap对象:
可以使用无参构造方法创建一个空的TreeMap,或者使用带有Comparator参数的构造方法创建一个具有自定义排序方式的TreeMap。
2. 添加键值对:
使用put(key, value)方法将键值对添加到TreeMap中,如果键已经存在,则会覆盖原来的值。
3. 获取值:
使用get(key)方法根据键获取对应的值。
4. 遍历:
使用entrySet()方法获取键值对的集合,然后使用foreach循环或迭代器遍历集合中的元素。
5. 删除键值对:
使用remove(key)方法根据键删除对应的键值对。
6. 其他常用方法:
例如size()获取元素的个数,containsKey(key)检查键是否存在,isEmpty()检查是否为空等。
下面是一个示例代码,展示了如何使用TreeMap:
import java.util.Comparator;
import java.util.TreeMap;
public class TreeMapExample {public static void main(String[] args) {// 创建TreeMap对象TreeMap<Integer, String> treeMap = new TreeMap<>(); // 添加键值对treeMap.put(3, "Three");treeMap.put(1, "One");treeMap.put(2, "Two");// 获取值String value = treeMap.get(2);System.out.println("Value for key 2: " + value); // 遍历for (var entry : treeMap.entrySet()) {System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());} // 删除键值对treeMap.remove(1); // 判断是否包含键boolean containsKey = treeMap.containsKey(3);System.out.println("Contains key 3: " + containsKey); // 获取元素个数int size = treeMap.size();System.out.println("Size of TreeMap: " + size);// 使用自定义排序方式的TreeMapTreeMap<String, Integer> customTreeMap = new TreeMap<>(Comparator.reverseOrder());customTreeMap.put("Three", 3);customTreeMap.put("One", 1);customTreeMap.put("Two", 2); // 遍历自定义排序方式的TreeMapfor (var entry : customTreeMap.entrySet()) {System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());}}
}
在上述示例中,首先创建了一个TreeMap对象,并通过put方法添加了几个键值对。接着使用get方法获取键为2的值,并使用entrySet方法获取键值对的集合进行遍历。随后使用remove方法删除了键为1的键值对,并使用containsKey方法判断是否包含键为3的键值对。最后使用size方法获取元素个数并输出。另外,也展示了使用自定义排序方式的TreeMap的示例。
(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)