Collections.emptyNavigableMap() 返回支持导航方法(如ceilingEntry、descendingMap)的不可变空NavigableMap,而Collections.emptySortedMap() 仅返回支持有序操作(如firstKey、subMap)的不可变空SortedMap,二者均不可变且线程安全,选择依据是接口契约需求而非功能多寡。

Collections.emptyNavigableMap() 和 Collections.emptySortedMap() 都返回不可变、空的只读映射视图,但它们的类型契约和适用场景不同——关键区别在于接口层级与导航能力,而非“是否可变”或“性能差异”。
emptySortedMap 返回 SortedMap 视图
它返回一个实现了 SortedMap 接口的空映射实例。该实例:
- 保证键有序(按自然顺序或指定
Comparator),但因为空,不涉及实际排序逻辑 - 支持
firstKey()、lastKey()、headMap()、tailMap()、subMap()等方法 - 调用这些方法会正常返回空视图(如
headMap(0)返回另一个空SortedMap),不会抛异常 - 不支持导航操作(如
ceilingEntry()),因为这些方法属于NavigableMap,而SortedMap不声明它们
emptyNavigableMap 返回 NavigableMap 视图
它返回一个实现了 NavigableMap 接口的空映射实例。该实例:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 同时也是
SortedMap的子类型,因此具备所有SortedMap方法 - 额外支持导航方法:如
lowerEntry(k)、floorKey(k)、higherEntry(k)、pollFirstEntry()等 - 所有导航方法在空映射上调用均安全返回
null(符合规范),不会抛NoSuchElementException - 支持
descendingMap(),返回一个同样不可变、空的逆序视图
两者共性:不可变性与类型安全
它们都:
- 是线程安全的(因不可变,无需同步)
- 不接受任何修改操作(
put、remove等会直接抛UnsupportedOperationException) - 返回的视图与原始映射共享同一不可变状态,无底层数据结构开销
- 适合用作默认值、占位符或 API 方法的空返回值,避免
null判定
选哪个?看接口契约需求
选择依据不是“功能多寡”,而是你代码期望接收的接口类型:
- 若方法签名要求
SortedMap<k></k>,就用emptySortedMap() - 若需要调用
ceilingEntry()或依赖descendingMap(),必须用emptyNavigableMap() - 不能将
emptySortedMap()强转为NavigableMap——运行时会失败
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










