NavigableMap继承SortedMap,提供有序键值对及导航方法。1. TreeMap实现自动排序;2. lowerKey、floorKey等定位邻近键;3. descendingMap实现逆序遍历;4. subMap等截取子范围,适用于排行榜与区间查询。

NavigableMap是Java集合框架中一个功能强大的接口,继承自SortedMap,提供了丰富的导航方法,适用于需要按顺序访问键值对并进行范围查询的场景。它最常用的实现类是TreeMap。通过NavigableMap,你可以方便地查找小于、大于、等于某个键的元素,甚至获取子映射。下面介绍几个关键操作技巧,帮助你高效使用NavigableMap实现导航功能。
1. 基本插入与排序
NavigableMap会自动根据键的自然顺序或自定义比较器对元素排序。插入数据后,遍历时会按升序输出。
- 使用put()添加键值对
- 默认按键升序排列
示例:
NavigableMapmap = new TreeMap<>(); map.put(5, "Five"); map.put(2, "Two"); map.put(8, "Eight"); map.put(1, "One"); // 输出顺序:1, 2, 5, 8
2. 使用导航方法定位元素
NavigableMap提供多个方法用于快速定位最接近的键,适合查找“前一个”或“后一个”元素。
立即学习“Java免费学习笔记(深入)”;
常用方法:- lowerKey(k):返回小于k的最大键
- floorKey(k):返回小于等于k的最大键
- ceilingKey(k):返回大于等于k的最小键
- higherKey(k):返回大于k的最小键
示例:
System.out.println(map.lowerKey(5)); // 输出 2 System.out.println(map.floorKey(5)); // 输出 5 System.out.println(map.ceilingKey(6)); // 输出 8 System.out.println(map.higherKey(8)); // 输出 null
3. 获取反向视图与逆序遍历
调用descendingMap()可获得一个键按降序排列的视图,便于从大到小处理数据。
- descendingMap() 返回逆序映射
- 可用于实现倒序迭代
示例:
for (Map.Entryentry : map.descendingMap().entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } // 输出顺序:8, 5, 2, 1
4. 截取子映射(Sub-map)操作
利用subMap、headMap、tailMap等方法可获取部分映射,支持是否包含边界。
灵活方法:- subMap(fromKey, toKey):获取[fromKey, toKey)之间的映射
- subMap(fromKey, true, toKey, false):指定是否包含端点
- headMap(toKey):获取小于toKey的所有项
- tailMap(fromKey):获取大于等于fromKey的所有项
示例:
NavigableMapsub = map.subMap(2, true, 8, false); // 包含键 2 和 5,不包含 8
基本上就这些。掌握NavigableMap的核心方法,能让你在处理有序键值数据时更加得心应手,特别是在实现排行榜、时间序列、区间搜索等场景中非常实用。不复杂但容易忽略的是边界控制和反向视图的使用,合理利用可以大幅简化逻辑。










