行业资讯 2025年08月6日
0 收藏 0 点赞 351 浏览 2817 个字
摘要 :

文章目录 1.区分大小写与不区分大小写的Map 2.创建不区分大小写的Map 2.1. 使用带有CASE_INSENSITIVE_ORDER比较器的TreeMap 2.2. 使用CaseInsensitiveMap 2.3. 使用Lin……




  • 1.区分大小写与不区分大小写的Map
  • 2.创建不区分大小写的Map
    • 2.1. 使用带有CASE_INSENSITIVE_ORDER比较器的TreeMap
    • 2.2. 使用CaseInsensitiveMap
    • 2.3. 使用LinkedCaseInsensitiveMap
  • 3.结论

Map是Java中最广泛使用的数据结构之一。Map是一个包含键值对的集合。作为一个要求,Map的键应该是不可变的。

由于它们的不可变性质,字符串通常被用作Map的键。默认情况下,Map中的字符串键是区分大小写的。本教程将展示如何创建一个具有不区分大小写键的Map。

1.区分大小写与不区分大小写的Map

首先让我们了解区分大小写和不区分大小写的Map之间的基本区别。

如前所述,默认情况下,键是区分大小写的。假设我们有一个以字符串为键和整数数字为值的Map。

caseSensitiveMap.put(\"A\", 1);   //{A=1}

让我们向Map添加一个条目。然后再添加一个具有相同键但采用小写字母的条目。由于键是区分大小写的,它们将被视为不同的键。现在,Map的内容将是{A=1, a=2}。

//区分大小写的map
caseSensitiveMap.put(\"A\", 1);   //{A=1}
caseSensitiveMap.put(\"a\", 2);  //{A=1, a=2}

现在,使用一个不区分大小写的Map重复相同的操作。我们将向这个Map添加相同的条目。由于键不区分大小写,“A”和“a”将被视为相同的键。

//不区分大小写的map
caseInsensitiveMap.put(\"A\", 1);   //{A=1}
caseInsensitiveMap.put(\"a\", 2);   //{A=2}

2.创建不区分大小写的Map

2.1. 使用带有CASE_INSENSITIVE_ORDER比较器的TreeMap

TreeMap提供了一种有效的方式来按排序顺序存储键值对。TreeMap不允许空键。由于TreeMap按排序顺序存储键,我们可以使用一个比较器来指定排序顺序,对于我们的用例,比较器将是String.CASE_INSENSITIVE_ORDER。

String.CASE_INSENSITIVE_ORDER返回一个比较器,通过忽略大小写来比较两个字符串。由于键的大小写将被忽略,Map中只会找到一个条目。

Map<String, Integer> caseInsensitiveTreeMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

caseInsensitiveTreeMap.put(\"AA\", 1);    //{AA=1}
caseInsensitiveTreeMap.put(\"aa\", 2);    //{AA=2}

我们还可以通过以不同大小写的方式删除键来验证不区分大小写的特性。删除后,Map的大小将为零。

caseInsensitiveTreeMap.remove(\"aA\");   //删除

需要注意的是,TreeMap对于像get()和put()这样的基本操作不提供常数时间性能。对于大多数应用程序来说,这不是问题,但如果我们有一个性能关键的应用程序,值得考虑。

2.2. 使用CaseInsensitiveMap

CaseInsensitiveMap类是Apache Commons Collections的一部分。由于它是一个外部库,可以从Maven仓库添加其最新依赖。如果您使用Maven,可以按照以下方式添加依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>

CaseInsensitiveMap将键存储为小写形式,并且还支持空键。

Map<String, Integer> caseInsensitiveMap = new CaseInsensitiveMap<>();

caseInsensitiveMap.put(\"A\", 1);      //{A=1}
caseInsensitiveMap.put(\"B\", 2);     //{A=1, B=2}
caseInsensitiveMap.put(null, 3);   //{A=1, B=2, null=3}

caseInsensitiveMap.put(\"a\", 4);     //{a=4, B=2, null=3}

请注意,键“B”已转换为小写并存储在Map中作为“b”。

同样,删除操作也是不区分大小写的。

caseInsensitiveMap.remove(\"B\");    //删除key=b的项

2.3. 使用LinkedCaseInsensitiveMap

LinkedCaseInsensitiveMap类是Spring框架的一部分。由于Spring是一个外部框架,您需要将其添加到类路径中。如果我们使用Spring或Spring Boot应用程序,它应该已经可用于类路径中。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.2.5.RELEASE</version>
</dependency>

LinkedCaseInsensitiveMap提供了一个不区分大小写的Map实现,它包装在java.util.LinkedHashMap周围。它维护元素的插入顺序,并保留插入的键的大小写,与Apache Common的CaseInsensitiveMap不同。它不允许空键。

Map<String, Integer> linkedCaseInsensitiveMap = new LinkedCaseInsensitiveMap<>();

linkedCaseInsensitiveMap.put(\"A\", 1);   //{A=1}
linkedCaseInsensitiveMap.put(\"B\", 2);  //{A=1, B=2}
linkedCaseInsensitiveMap.put(\"a\", 4);   //{a=4, B=2}

请注意,键“B”保留了大小写。键“a”将覆盖“A”。由于“a”是在“B”之后插入的,元素按照那个顺序显示。

我们可以使用任何大小写来调用这个Map上的remove操作。

linkedCaseInsensitiveMap.remove(\"b\"); 

3.结论

这个Java教程探讨了创建不区分大小写的Map的各种方法。我们学习了使用TreeMap、Spring的LinkedCaseInsensitiveMap和Apache Commons的CaseInsensitiveMap的方法。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9383.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

986
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

463
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

347
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

455
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

515
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

831
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号