📜  Java TreeMap 特殊方法(1)

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

Java TreeMap 特殊方法

Java TreeMap是一种基于红黑树数据结构的Map实现类,它可以实现基于键的自然排序,支持添加、查询、删除等常规操作。除了常规操作以外,Java TreeMap还具有许多特殊方法,本文将介绍其中一些常用的方法。

1. floorKey(K key) 和 ceilingKey(K key)

这两个方法用于在TreeMap中查找小于等于key的最大键(或者大于等于key的最小键)。如果这样的键不存在,则返回null。这两个方法的返回值类型均为K,即键的类型。

例如:

TreeMap<Integer, String> map = new TreeMap<>();
map.put(1, "one");
map.put(3, "three");
map.put(5, "five");

System.out.println(map.floorKey(4)); // 输出3
System.out.println(map.ceilingKey(4)); // 输出5
2. descendingKeySet() 和 descendingMap()

这两个方法返回TreeMap中键的逆序视图。具体来说,descendingKeySet()返回一个NavigableSet类型的对象,它包含所有键的逆序排列,而descendingMap()方法返回一个新的TreeMap对象,其中所有键值对都被反转。

例如:

TreeMap<Integer, String> map = new TreeMap<>();
map.put(1, "one");
map.put(3, "three");
map.put(5, "five");

NavigableSet<Integer> descendingKeySet = map.descendingKeySet();
for (Integer key : descendingKeySet) {
    System.out.print(key + " "); // 输出5 3 1
}

TreeMap<Integer, String> descendingMap = map.descendingMap();
for (Map.Entry<Integer, String> entry : descendingMap.entrySet()) {
    System.out.print(entry.getKey() + ":" + entry.getValue() + " "); // 输出5:five 3:three 1:one
}
3. headMap(K toKey, boolean inclusive) 和 tailMap(K fromKey, boolean inclusive)

这两个方法可用于获取TreeMap中的子映射。headMap(K toKey, boolean inclusive)方法返回一个新的TreeMap对象,包含所有键小于toKey的键值对。如果inclusive参数为true,则包括toKey键的键值对。tailMap(K fromKey, boolean inclusive)方法返回一个新的TreeMap对象,包含所有键大于等于fromKey的键值对。如果inclusive参数为true,则包括fromKey键的键值对。

例如:

TreeMap<Integer, String> map = new TreeMap<>();
map.put(1, "one");
map.put(3, "three");
map.put(5, "five");

TreeMap<Integer, String> headMap = map.headMap(3, true);
for (Map.Entry<Integer, String> entry : headMap.entrySet()) {
    System.out.print(entry.getKey() + ":" + entry.getValue() + " "); // 输出1:one 3:three
}

TreeMap<Integer, String> tailMap = map.tailMap(3, true);
for (Map.Entry<Integer, String> entry : tailMap.entrySet()) {
    System.out.print(entry.getKey() + ":" + entry.getValue() + " "); // 输出3:three 5:five
}
4. pollFirstEntry() 和 pollLastEntry()

这两个方法分别用于删除并返回TreeMap中的第一个和最后一个键值对。如果TreeMap为空,则返回null。这两个方法的返回值类型均为Map.Entry<K, V>,即键值对类型。

例如:

TreeMap<Integer, String> map = new TreeMap<>();
map.put(1, "one");
map.put(3, "three");
map.put(5, "five");

Map.Entry<Integer, String> firstEntry = map.pollFirstEntry();
System.out.println(firstEntry.getKey() + ":" + firstEntry.getValue()); // 输出1:one

Map.Entry<Integer, String> lastEntry = map.pollLastEntry();
System.out.println(lastEntry.getKey() + ":" + lastEntry.getValue()); // 输出5:five

以上就是Java TreeMap的一些特殊方法介绍,除了这些方法以外,还有很多其他的方法可以使用,建议开发者在实际项目中仔细研究和使用。