java中sortedmap的submap()方法返回原映射的动态视图,支持左闭右开区间(如submap(3,8))及java 8+的灵活边界控制(如submap(5,true,10,false)),修改双向同步,键需可比较,非独立副本。

Java 中可以通过 SortedMap 的 subMap() 方法获取指定范围的子映射,它返回一个与原映射关联的、动态更新的视图。
使用 subMap() 获取左闭右开区间子映射
subMap(K fromKey, K toKey) 返回从 fromKey(含)到 toKey(不含)之间的键值对。注意:两个键都必须存在或可比较,且 fromKey ≤ toKey,否则抛出 IllegalArgumentException。
- 该子映射是原映射的“活视图”——修改子映射会同步影响原映射,反之亦然
- 键类型必须实现
Comparable,或在构造时传入Comparator - 若
fromKey不存在,子映射从第一个 ≥fromKey的键开始 - 若
toKey不存在,子映射在第一个 ≥toKey的键前结束
获取带边界的灵活子映射(Java 8+)
TreeMap(SortedMap 最常用实现)还提供更精确的控制方法:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
-
subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive):支持独立设置左右边界是否包含 -
headMap(K toKey, boolean inclusive):获取小于(或小于等于)toKey的所有条目 -
tailMap(K fromKey, boolean inclusive):获取大于(或大于等于)fromKey的所有条目
例如:map.subMap(5, true, 10, false) 表示 [5, 10);map.tailMap(3, true) 表示 [3, +∞)。
实际使用注意事项
直接使用 SortedMap 接口声明变量时,需确保底层实现支持这些方法(如 TreeMap),因为接口本身不强制要求实现全部子映射方法。
- 避免在迭代子映射时修改原映射结构(如
put/remove非子映射范围的键),可能引发ConcurrentModificationException - 子映射不支持
putAll()等批量操作,除非所有键都在其范围内 - 若需独立副本,应显式构造新
TreeMap:new TreeMap(subMap)
简单示例代码
(以 TreeMap 实现 SortedMap)
SortedMap<integer string> map = new TreeMap();
map.put(1, "a"); map.put(3, "c"); map.put(5, "e"); map.put(7, "g"); map.put(9, "i");
SortedMap<integer string> range = map.subMap(3, 8); // [3, 8) → {3="c", 5="e", 7="g"}
range.put(4, "d"); // 原 map 也会新增 (4,"d")
System.out.println(map); // {1=a, 3=c, 4=d, 5=e, 7=g, 9=i}
</integer></integer>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










