进阶day04-具有排序功能的双列集合TreeMap的使用

This commit is contained in:
2026-02-03 14:04:13 +08:00
parent 4e8aec5d48
commit 28a8ff0ec4

View File

@@ -0,0 +1,124 @@
package com.inmind.map01;
import java.util.*;
/*
TreeMap 常用 API 总结
基本操作
put(K key, V value): 添加键值对,键重复时覆盖值
get(Object key): 获取指定键对应的值
remove(Object key): 删除指定键的键值对
containsKey(Object key): 判断是否包含指定键
containsValue(Object value): 判断是否包含指定值
size(): 返回键值对数量
clear(): 清空所有键值对
视图获取
keySet(): 返回所有键的 Set 集合
values(): 返回所有值的 Collection 集合
entrySet(): 返回所有键值对的 Set 集合
导航方法(有序特性相关)
firstEntry()/firstKey(): 获取第一个键值对 / 键
lastEntry()/lastKey(): 获取最后一个键值对 / 键
lowerKey(K key): 获取小于指定键的最大键
higherKey(K key): 获取大于指定键的最小键
floorEntry(K key): 获取小于等于指定键的最大键值对
ceilingEntry(K key): 获取大于等于指定键的最小键值对
子映射操作
headMap(K toKey): 返回键小于 toKey 的子映射
tailMap(K fromKey): 返回键大于等于 fromKey 的子映射
subMap(K fromKey, K toKey): 返回键在 [fromKey, toKey) 范围内的子映射
*/
public class TreeMapDemo08 {
public static void main(String[] args) {
// 1. 创建TreeMap默认按键的自然顺序排序
TreeMap<Integer, String> treeMap = new TreeMap<>();
// 2. 创建TreeMap指定比较器如按键降序排序
TreeMap<Integer, String> reverseMap = new TreeMap<>(Comparator.reverseOrder());
// 3. 添加元素put()
treeMap.put(3, "Apple");
treeMap.put(1, "Banana");
treeMap.put(2, "Cherry");
treeMap.put(3, "Apricot"); // 键重复,会覆盖原有值
System.out.println("TreeMap内容: " + treeMap);
// 4. 获取指定键的值get()
String value = treeMap.get(2);
System.out.println("键2对应的值: " + value); // 输出: Cherry
// 5. 删除指定键的键值对remove()
treeMap.remove(1);
System.out.println("删除键1后: " + treeMap); // 输出: {2=Cherry, 3=Apricot}
// 6. 判断是否包含指定键containsKey()
boolean hasKey = treeMap.containsKey(2);
System.out.println("是否包含键2: " + hasKey); // 输出: true
// 7. 判断是否包含指定值containsValue()
boolean hasValue = treeMap.containsValue("Apricot");
System.out.println("是否包含值Apricot: " + hasValue); // 输出: true
// 8. 获取集合大小size()
System.out.println("集合大小: " + treeMap.size()); // 输出: 2
// 9. 清空集合clear()
// treeMap.clear();
// 10. 获取所有键的集合keySet()
Set<Integer> keys = treeMap.keySet();
System.out.println("所有键: " + keys); // 输出: [2, 3]
// 11. 获取所有值的集合values()
Collection<String> values = treeMap.values();
System.out.println("所有值: " + values); // 输出: [Cherry, Apricot]
// 12. 获取所有键值对entrySet()
Set<Map.Entry<Integer, String>> entries = treeMap.entrySet();
System.out.println("所有键值对: " + entries);
// 输出: [2=Cherry, 3=Apricot]
System.out.println("----------------------TreeMap独有的排序功能---------------------------");
// 13. 获取第一个键值对firstEntry()
Map.Entry<Integer, String> firstEntry = treeMap.firstEntry();
System.out.println("第一个键值对: " + firstEntry); // 输出: 2=Cherry
// 14. 获取最后一个键值对lastEntry()
Map.Entry<Integer, String> lastEntry = treeMap.lastEntry();
System.out.println("最后一个键值对: " + lastEntry); // 输出: 3=Apricot
// 15. 获取小于指定键的最大键lowerKey()
Integer lowerKey = treeMap.lowerKey(3);
System.out.println("小于3的最大键: " + lowerKey); // 输出: 2
// 16. 获取大于指定键的最小键higherKey()
Integer higherKey = treeMap.higherKey(2);
System.out.println("大于2的最小键: " + higherKey); // 输出: 3
// 17. 获取小于等于指定键的最大键值对floorEntry()
Map.Entry<Integer, String> floorEntry = treeMap.floorEntry(3);
System.out.println("小于等于3的最大键值对: " + floorEntry); // 输出: 3=Apricot
// 18. 获取大于等于指定键的最小键值对ceilingEntry()
Map.Entry<Integer, String> ceilingEntry = treeMap.ceilingEntry(2);
System.out.println("大于等于2的最小键值对: " + ceilingEntry); // 输出: 2=Cherry
// 19. 截取子映射headMap():键小于指定值)
SortedMap<Integer, String> headMap = treeMap.headMap(3);
System.out.println("键小于3的子映射: " + headMap); // 输出: {2=Cherry}
// 20. 截取子映射tailMap():键大于等于指定值)
SortedMap<Integer, String> tailMap = treeMap.tailMap(2);
System.out.println("键大于等于2的子映射: " + tailMap); // 输出: {2=Cherry, 3=Apricot}
// 21. 截取子映射subMap():键在[fromKey, toKey)范围内)
SortedMap<Integer, String> subMap = treeMap.subMap(2, 3);
System.out.println("键在[2,3)范围内的子映射: " + subMap); // 输出: {2=Cherry}
}
}