Java 集合 - 用好 SortedMap 和 NavigableMap,优化 Java 集合排序与操作效率
在Java中SortedMap和NavigableMap接口为Map提供了对键排序的功能。这些接口有助于管理那些需要有序存储和按特定顺序访问键值对的情况。它们通过TreeMap类的实现来工作TreeMap是一种自平衡的红黑树数据结构它保证了键的顺序。SortedMap是Map接口的扩展而NavigableMap是SortedMap的一个进一步扩展。这两个接口的实现都可以使用TreeMap类。它们都能确保键值对按照键进行排序。SortedMap和NavigableMap的功能SortedMap和NavigableMap接口通过键值对的排序为Map提供了额外的功能。下面是它们的一些重要方法和使用方法。方法概述SortedMap接口通过以下方法扩展了MapfirstKey()和lastKey()返回Map中最小和最大键。headMap(toKey)返回一个新的SortedMap其键小于toKey。tailMap(fromKey)返回一个新的SortedMap其键大于或等于fromKey。subMap(fromKey, toKey)返回一个新的SortedMap其键大于或等于fromKey且小于toKey。这些方法返回的SortedMap是原始Map的视图任何对这些视图的更改都会反映在原始Map中。值得注意的是这些视图不能插入超出原始Map范围的键。NavigableMap的附加功能NavigableMap接口提供了更多的功能包括方法navigableKeySet()它返回一个NavigableSet而不是普通的keySet()。NavigableSet提供了更多的操作例如返回下一个和上一个键。示例SortedMap的使用让我们通过一个例子来看看SortedMap和其方法如何工作SortedMapInteger, String map new TreeMap(); map.put(1, one); map.put(2, two); map.put(3, three); map.put(5, five); map.put(6, six); // 获取最小键和最大键 System.out.println(First Key: map.firstKey()); // 输出 1 System.out.println(Last Key: map.lastKey()); // 输出 6 // 获取键小于3的部分 SortedMapInteger, String headMap map.headMap(3); headMap.forEach((key, value) - System.out.println(key :: value)); // 获取键大于或等于3的部分 SortedMapInteger, String tailMap map.tailMap(3); tailMap.forEach((key, value) - System.out.println(key :: value)); // 获取键在3到5之间的部分 SortedMapInteger, String subMap map.subMap(3, 6); subMap.forEach((key, value) - System.out.println(key :: value));运行结果First Key: 1 Last Key: 6 1 :: one 2 :: two 3 :: three 3 :: three 5 :: five 6 :: six 3 :: three 4 :: four 5 :: five错误处理示例SortedMap和NavigableMap返回的视图在修改时有一些限制。比如我们通过headMap()方法创建了一个视图并试图向这个视图插入一个不在范围内的键这会导致IllegalArgumentException异常。SortedMapInteger, String headMap map.headMap(3); headMap.put(0, zero); // 这个是合法的因为 0 3 headMap.put(4, four); // 这个会抛出 IllegalArgumentException 异常因为 4 不在 headMap 范围内解释headMap(3)返回一个只包含小于3的键的SortedMap视图。因此向该视图插入键值对(4, four)会抛出异常因为4超出了headMap的键范围。但插入(0, zero)是合法的因为0小于3。通过Comparator控制排序与SortedSet和NavigableSet类似SortedMap和NavigableMap的键必须实现Comparable或者你可以在创建TreeMap时提供一个Comparator来决定键的排序方式。如果提供了Comparator即使键实现了ComparableComparator也会被优先使用。TreeMapInteger, String map new TreeMap(Comparator.reverseOrder()); map.put(1, one); map.put(2, two); map.put(3, three); map.forEach((key, value) - System.out.println(key :: value));运行结果3 :: three 2 :: two 1 :: one总结SortedMap和NavigableMap提供了对键排序的强大支持能够按顺序查询键并对部分键集合进行操作。通过headMap(),tailMap(),subMap()等方法你可以方便地获取按顺序划分的Map视图并对这些视图进行修改。NavigableMap提供了更多的方法例如navigableKeySet()让你可以获得更多基于顺序操作的功能。在使用视图时要注意不可以插入不在视图范围内的键。通过这些方法和特性SortedMap和NavigableMap能够帮助你更高效地处理排序和部分视图的需求是构建有序Map数据结构的理想选择。

相关新闻

激光雷达互扰抗干扰全解|底层串扰机理、软硬协同防护、集群场景落地、故障排查、ROS全套工程代码、多工况适配全覆盖

激光雷达互扰抗干扰全解|底层串扰机理、软硬协同防护、集群场景落地、故障排查、ROS全套工程代码、多工况适配全覆盖

目录 一、行业前言:集群化部署下雷达互扰刚需痛点 二、激光雷达同源互扰底层机理分级深挖(含数学模型+干扰分类) 2.1 主流雷达工作基础(干扰产生前置条件) 2.2 两类同源干扰精准分类(SPIE光学学术分级) 2.2.1 直射式硬干扰(危害最高、故障率最大) 2.2.2 散射式软…

2026/6/23 16:04:58阅读更多 →
C# Binary读写流 / BufferedStream缓存流 全套笔记

C# Binary读写流 / BufferedStream缓存流 全套笔记

前置说明所有高级文件流都必须依赖 FileStream 基础文件流,相当于:FileStream 是通道,BinaryWriter/BinaryReader/BufferedStream 是工具。必备命名空间:using System.IO;、using System.Text;一、BinaryWriter / BinaryReader 二…

2026/6/23 16:04:58阅读更多 →
TAP/TUN与自定义网络协议栈

TAP/TUN与自定义网络协议栈

这个文章对TAP/TUN讲的比较清楚 https://blog.csdn.net/tjcwt2011/article/details/160653673 《深入高可用系统原理与设计》https://www.thebyte.com.cn/network/tuntap.html 一、在用户空间实现自定义网络协议栈 核心思想 内核协议栈是个黑盒——你想改 TCP 拥塞控制算法…

2026/6/23 15:59:57阅读更多 →
终极指南:如何在电脑上用QtScrcpy玩转安卓手游

终极指南:如何在电脑上用QtScrcpy玩转安卓手游

终极指南:如何在电脑上用QtScrcpy玩转安卓手游 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 想要在电脑大屏上流畅玩手游?想用键盘鼠标精准操作《和平精英…

2026/6/23 17:10:11阅读更多 →
hongyangWeixinArticles项目实战教程:如何将公众号文章转化为结构化知识库

hongyangWeixinArticles项目实战教程:如何将公众号文章转化为结构化知识库

hongyangWeixinArticles项目实战教程:如何将公众号文章转化为结构化知识库 【免费下载链接】hongyangWeixinArticles 主要用于记录微信公众号所推送的所有文章,公众号:hongyangAndroid 项目地址: https://gitcode.com/gh_mirrors/ho/hongya…

2026/6/23 17:10:11阅读更多 →
EthereumJS-TX迁移指南:从独立库到EthereumJS VM monorepo的无缝过渡

EthereumJS-TX迁移指南:从独立库到EthereumJS VM monorepo的无缝过渡

EthereumJS-TX迁移指南:从独立库到EthereumJS VM monorepo的无缝过渡 【免费下载链接】ethereumjs-tx Project is in active development and has been moved to the EthereumJS VM monorepo. 项目地址: https://gitcode.com/gh_mirrors/et/ethereumjs-tx Et…

2026/6/23 17:10:11阅读更多 →
Awaken:终极跨平台EPUB阅读器 - 基于WebDAV的免费全平台同步解决方案

Awaken:终极跨平台EPUB阅读器 - 基于WebDAV的免费全平台同步解决方案

Awaken:终极跨平台EPUB阅读器 - 基于WebDAV的免费全平台同步解决方案 【免费下载链接】Awaken 一个基于WebDAV的全平台EPUB阅读器,支持笔记、进度、书签同步,支持Kindle笔记导入。 项目地址: https://gitcode.com/gh_mirrors/aw/Awaken …

2026/6/23 17:10:11阅读更多 →
10分钟上手Anycost GAN:Jupyter Notebook交互式实验教程 [特殊字符]

10分钟上手Anycost GAN:Jupyter Notebook交互式实验教程 [特殊字符]

10分钟上手Anycost GAN:Jupyter Notebook交互式实验教程 🚀 【免费下载链接】anycost-gan [CVPR 2021] Anycost GANs for Interactive Image Synthesis and Editing 项目地址: https://gitcode.com/gh_mirrors/an/anycost-gan Anycost GAN是一个革…

2026/6/23 17:10:11阅读更多 →
PowerCLI-Example-Scripts最佳实践:社区脚本的质量控制与维护

PowerCLI-Example-Scripts最佳实践:社区脚本的质量控制与维护

PowerCLI-Example-Scripts最佳实践:社区脚本的质量控制与维护 【免费下载链接】PowerCLI-Example-Scripts 项目地址: https://gitcode.com/gh_mirrors/po/PowerCLI-Example-Scripts PowerCLI-Example-Scripts是VMware PowerCLI的社区脚本集合,提…

2026/6/23 17:05:10阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/23 7:04:52阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/23 1:55:32阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/23 5:55:37阅读更多 →
2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流…

2026/6/23 0:00:38阅读更多 →
2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

模块一:行业背景——百亿赛道爆发,北京市场的特殊性与选型困局2026年,电子沙盘行业已走过“要不要做”的讨论,进入“找谁做、怎么做”的深水区。据行业研究机构数据,2025年国内电子沙盘市场规模已突破85亿元&#xff0…

2026/6/23 0:00:38阅读更多 →
音视频场景下的 Java 开发者面试:技术与挑战

音视频场景下的 Java 开发者面试:技术与挑战

面试互联网大厂:从音视频场景看 Java 开发者的技能与挑战 在互联网大厂求职的面试中,Java 开发者往往需要面对严苛的技术问题。今天,我们将通过一位名叫燕双非的搞笑程序员与严肃的面试官之间的对话,看看在音视频场景下&#xff0…

2026/6/23 0:00:38阅读更多 →