firstKey()和lastKey()分别返回TreeMap中最小和最大键,时间复杂度O(1),要求非空否则抛NoSuchElementException,常用于范围判断与子区间构建。

TreeMap 的 firstKey() 和 lastKey() 方法用于快速获取当前映射中**最小和最大键**,前提是 TreeMap 非空;否则会抛出 NoSuchElementException。这两个方法时间复杂度为 O(1),因为 TreeMap 内部通过红黑树结构维护了指向最左(最小)和最右(最大)节点的引用,无需遍历。
使用 firstKey() 获取最小键
返回当前 TreeMap 中自然排序下最小的键(或按自定义 Comparator 排序后的首个键)。要求 TreeMap 不为空。
- 若 TreeMap 为空,调用会立即抛出
NoSuchElementException - 适用于需要快速判断“起始范围”或取字典序第一个配置项等场景
- 示例:TreeMap<String, Integer> map = new TreeMap<>(); map.put("banana", 2); map.put("apple", 1); map.put("cherry", 3); System.out.println(map.firstKey()); // 输出 "apple"
使用 lastKey() 获取最大键
返回当前 TreeMap 中自然排序下最大的键(或按自定义 Comparator 排序后的末尾键)。同样要求非空。
- 与
firstKey()对称,底层直接访问红黑树最右节点 - 适合做范围截断、日志时间戳上限检查等
- 示例:System.out.println(map.lastKey()); // 输出 "cherry"
安全使用的常见做法
避免运行时异常,建议在调用前检查是否为空,或使用 Optional 封装:
立即学习“Java免费学习笔记(深入)”;
- 显式判空:if (!map.isEmpty()) { String min = map.firstKey(); ... }
- Java 9+ 可结合
Optional.ofNullable()间接处理(需自行封装),但 TreeMap 本身不返回 Optional - 注意:即使键类型为 Integer 或 Long,
firstKey()返回的是键对象本身,不是 int/long 值,拆箱需谨慎(避免 null 或空指针)
配合 subMap 等范围视图使用
firstKey() 和 lastKey() 常与 subMap(fromKey, toKey)、headMap(toKey)、tailMap(fromKey) 联合使用,动态构建子区间:
- 例如获取“除最小键外的所有项”:map.tailMap(map.firstKey(), false)(
false表示不包含边界) - 获取“最大键对应的完整条目”:Map.Entry<K,V> lastEntry = map.lastEntry();(推荐用
lastEntry()比先取lastKey()再get()更高效)


















