Java 集合 - 用好 SortedMap 和 NavigableMap,优化 Java 集合排序与操作效率
📅 2026/6/23 16:05:45
👁️ 次浏览
在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数据结构的理想选择。
目录
一、行业前言:集群化部署下雷达互扰刚需痛点
二、激光雷达同源互扰底层机理分级深挖(含数学模型+干扰分类)
2.1 主流雷达工作基础(干扰产生前置条件)
2.2 两类同源干扰精准分类(SPIE光学学术分级)
2.2.1 直射式硬干扰(危害最高、故障率最大)
2.2.2 散射式软…
📅 2026/6/23 16:05:45
前置说明所有高级文件流都必须依赖 FileStream 基础文件流,相当于:FileStream 是通道,BinaryWriter/BinaryReader/BufferedStream 是工具。必备命名空间:using System.IO;、using System.Text;一、BinaryWriter / BinaryReader 二…
📅 2026/6/23 16:05:45
协作机器人选型的 6 个技术维度:重复定位精度、轴数、负载与防爆一文讲透
一句话先行: 协作机器人(cobot)选型,核心看 6 个技术维度——负载、臂展、重复定位精度、轴数与运动学、安全与认证、控制与二次开发能力。把这…
📅 2026/6/23 16:05:45
Coblocks入门教程:零基础打造响应式WordPress网站的7个步骤 【免费下载链接】coblocks A suite of professional page building content blocks for the WordPress Gutenberg block editor. 项目地址: https://gitcode.com/gh_mirrors/co/coblocks
Coblocks…
📅 2026/6/23 17:20:53
TaskJuggler资源分配技巧:让团队效率最大化的秘密武器 【免费下载链接】TaskJuggler TaskJuggler - Project Management beyond Gantt chart drawing 项目地址: https://gitcode.com/gh_mirrors/ta/TaskJuggler
TaskJuggler是一款强大的开源项目管理工具&…
📅 2026/6/23 17:20:53
概述产品适用范围凯源智能KT3351馈线弧光保护装置适用于工业和民用10kV及以下电压等级的开关柜内弧光保护和测控。可用于普通开关柜,体积小、深度浅、具有完整的电流保护、电压保护、开关量输入、弧光保护、弧光电流保护、继电器输出和通讯功能。产品特点采用32位处…
📅 2026/6/23 17:20:53
火狐浏览器操作 1.下载安装火狐浏览器,官网地址: https://www.firefox.com/zh-CN/ 2.下载火狐浏览器驱动geckodriver: 官网下载最新版本:https://github.com/mozilla/geckodriver/releases 下载后解压,将解压后的文件放在python的安装路径下与python.exe在同一路径, 可通…
📅 2026/6/23 17:20:53
super是继承用的
主要参考1:Python super() 函数 | 菜鸟教程 (runoob.com)
主要参考2:python类中super()_python super(a,a)_wanghua609的博客-CSDN博客 class FooParent(object):def __init__(self):self.parent I…
📅 2026/6/23 17:20:53
摘要: 关键路径算法有一定的难度, 先从左到右, 再从右到左.
1. 代码
将 Java 代码https://blog.csdn.net/minfanphd/article/details/116975772 稍作整理, 告诉 DeepSeek: 将如下 Java 代码翻译为 C 代码.
#include <stdio.h>
#include <stdlib.h>
#include <…
📅 2026/6/23 17:15:53
1. GRIP模型:问答系统的新范式在自然语言处理领域,问答系统(QA)一直是最具挑战性的任务之一。传统方法要么依赖预训练语言模型的参数化知识,要么采用固定的检索-生成流程,都存在明显的局限性。GRIP(Grounded Retrieval with Itera…
📅 2026/6/23 0:51:59
1. 项目概述:一次对高危漏洞的深度剖析与实战复现最近在安全圈里,一个关于Atlassian Confluence的漏洞讨论热度很高,编号是CVE-2023-22527。这个漏洞的标签是“远程代码执行”,对于任何使用Confluence作为知识管理和协作平台的企业…
📅 2026/6/23 0:51:59
1. 项目概述:为什么微信小程序也需要渗透测试? 你可能觉得,微信小程序运行在微信这个“超级App”的沙箱里,天然就比独立的App或网站更安全。这种想法在几年前或许还说得通,但随着小程序生态的爆炸式增长,它…
📅 2026/6/23 0:51:59
1. 从手册到实战:SLIDER与SPINBOX控件的深度解析在嵌入式GUI开发里摸爬滚打十几年,我见过太多项目因为界面交互的“小问题”而卡壳。参数调节不跟手、数值输入效率低下,这些看似不起眼的细节,往往是决定产品用户体验成败的关键。e…
📅 2026/6/23 3:33:35
暗黑2重获新生:D2DX如何让经典游戏在现代Windows系统上流畅运行 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx
…
📅 2026/6/23 2:15:55
CompressO终极指南:免费开源的视频图像压缩神器 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co/compressO
你…
📅 2026/6/23 3:43:12