Java 中的 TreeMap 用于存储与 HashMap
类非常相似的键值对。
不同之处在于 TreeMap 提供了一种以排序顺序存储键/值对的有效方法。
它是一个基于红黑树的“NavigableMap”实现。
TreeMap 的特性
- 它存储类似于 HashMap 的键值对。
- 它只允许不同的键。重复密钥是不可能的。
- 它不能有
null
键,但可以有多个null
值。 - 它按排序顺序(自然顺序)或者通过地图创建时提供的“比较器”存储键。
- 它为
containsKey
、get
、put
和remove
操作提供有保证的 log(n) 时间成本。 - 它不是同步的。
使用Collections.synchronizedSortedMap(new TreeMap())
在并发环境中工作。
iterator
方法返回的迭代器是快速失败的。
on it road.com
TreeMap的构造函数
- TreeMap():使用其键的自然顺序创建一个新的空树图。
- TreeMap(Comparator c):创建一个新的空树图,根据给定的比较器排序。
- TreeMap(Map map):创建一个包含与给定映射相同映射的新树映射,根据其键的自然顺序排序。
- TreeMap(SortedMap map):创建一个新的树图,其中包含与指定的排序图相同的映射并使用相同的顺序。
TreeMap 的层次结构
TreeMap 类在 Java 中声明如下。
它扩展了 AbstractMap 类并实现了 NavigableMap 接口。
这里“K”是键的类型,“V”是映射到键的值的类型。
public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable { //implementation }
TreeMap 的方法
- void clear():它从地图中删除所有键值对。
- void size():它返回此映射中存在的键值对的数量。
- void isEmpty():如果此映射不包含键值映射,则返回 true..
- boolean containsKey(Object key):如果映射中存在指定的键,则返回“true”。
- boolean containsValue(Object key):如果指定值映射到映射中的至少一个键,则返回“true”。
- Object get(Object key):它检索由指定的“key”映射的“value”,如果此映射不包含该键的映射,则为 null。
- Object remove(Object key):它从映射中删除指定键的键值对(如果存在)。
- Comparator Comparator():它返回用于对该映射中的键进行排序的比较器,如果该映射使用其键的自然顺序,则返回 null。
- Object firstKey():它返回当前在树图中的第一个(最少)键。
- Object lastKey():它返回当前在树图中的最后一个(最大)键。
- 对象天花板键(对象键):它返回大于或者等于给定键的最小键,如果没有这样的键,则返回 null。
- Object HigherKey(Object key):返回严格大于指定键的最小键。
- NavigableMap 降序映射():它返回此映射中包含的映射的逆序视图。
Java TreeMap 示例
自然排序的 TreeMap 示例
import java.util.Iterator; import java.util.TreeMap; public class LinkedHashMapExample { public static void main(String[] args) { // 默认自然排序 TreeMap<Integer, String> pairs = new TreeMap<>(); pairs.put(2, "B"); pairs.put(1, "A"); pairs.put(3, "C"); String value = pairs.get(3); //get method System.out.println(value); value = pairs.getOrDefault(5, "oops"); //getOrDefault method System.out.println(value); // TreeMap迭代 Iterator<Integer> iterator = pairs.keySet().iterator(); while(iterator.hasNext()) { Integer key = iterator.next(); System.out.println("Key: " + key + ", Value: " + pairs.get(key)); } // 从 TreeMap中删除元素 pairs.remove(3); System.out.println(pairs); System.out.println(pairs.containsKey(1)); //containsKey method System.out.println(pairs.containsValue("B")); //containsValue method System.out.println(pairs.ceilingKey(2)); } }
输出:
C oops Key: 1, Value: A Key: 2, Value: B Key: 3, Value: C {1=A, 2=B} true true 2
使用比较器自定义排序的 TreeMap 示例
import java.util.Iterator; import java.util.TreeMap; public class LinkedHashMapExample { public static void main(String[] args) { // 逆序排序 TreeMap<Integer, String> pairs = new TreeMap<>(Collections.reverseOrder()); pairs.put(2, "B" ); pairs.put(1, "A"); pairs.put(3, "C"); System.out.println(pairs); } }
输出:
{3=C, 2=B, 1=A}
日期:2020-09-17 00:09:48 来源:oir作者:oir