CaseInsensitiveMap
# 功能介绍
CaseInsensitiveMap是Hutool中提供的大小写不敏感的Map实现,它在处理键时会忽略大小写。这意味着"Name"和"name"会被视为同一个键,方便在不区分大小写的场景下使用Map。
# 主要特性
- 键大小写不敏感,"Name"和"name"视为同一键
- 基于LinkedHashMap实现,保持插入顺序
- 支持所有Map接口方法
- 支持null键和null值
- 线程不安全,建议在单线程环境下使用
# 适用场景
- 需要处理不区分大小写键的Map场景
- 从外部来源(如HTTP请求参数、配置文件)获取键值对,键的大小写不固定
- 需要保持插入顺序的大小写不敏感Map
- 需要兼容不同大小写键的场景
# 使用示例
# 示例1:基本用法
// 创建CaseInsensitiveMap
CaseInsensitiveMap<String, Object> map = new CaseInsensitiveMap<>();
// 添加键值对
map.put("Name", "hutool");
map.put("VERSION", "7.0.0");
map.put("Author", "looly");
// 获取值,忽略大小写
String name = (String) map.get("name");
// 输出: hutool
String version = (String) map.get("version");
// 输出: 7.0.0
String author = (String) map.get("AUTHOR");
// 输出: looly
// 遍历Map,保持插入顺序
map.forEach((key, value) -> {
Console.log(key + "=" + value);
});
// 输出:
// Name=hutool
// VERSION=7.0.0
// Author=looly
# 示例2:判断键是否存在
CaseInsensitiveMap<String, Object> map = new CaseInsensitiveMap<>();
map.put("Name", "hutool");
// 判断键是否存在,忽略大小写
boolean containsName1 = map.containsKey("name");
// 输出: true
boolean containsName2 = map.containsKey("NAME");
// 输出: true
boolean containsVersion = map.containsKey("version");
// 输出: false
# 示例3:移除键值对
CaseInsensitiveMap<String, Object> map = new CaseInsensitiveMap<>();
map.put("Name", "hutool");
map.put("Version", "7.0.0");
// 移除键值对,忽略大小写
map.remove("NAME");
// 移除后,map中只包含 {Version=7.0.0}
// 再次移除
map.remove("version");
// 移除后,map为空
# 示例4:与MapUtil结合使用
// 使用MapUtil创建CaseInsensitiveMap
Map<String, Object> map = MapUtil.newCaseInsensitiveMap();
map.put("Name", "hutool");
map.put("Version", "7.0.0");
// 获取值,忽略大小写
String name = (String) map.get("name");
// 输出: hutool
# 注意事项
- CaseInsensitiveMap是线程不安全的,在多线程环境下使用需要额外同步
- 键的原始大小写会被保留,遍历或toString()时会显示原始大小写
- 不支持重复键,即使大小写不同,后添加的键值对会覆盖先添加的
- 性能与LinkedHashMap相当,适合大多数场景
- 支持null键,但null键不进行大小写转换
# 方法列表
CaseInsensitiveMap继承自LinkedHashMap,因此支持所有Map接口方法,主要包括:
| 方法名 | 描述 | 参数 | 返回值 |
|---|---|---|---|
| put(K key, V value) | 添加键值对,键大小写不敏感 | key: 键, value: 值 | V |
| get(Object key) | 获取值,键大小写不敏感 | key: 键 | V |
| containsKey(Object key) | 判断键是否存在,键大小写不敏感 | key: 键 | boolean |
| remove(Object key) | 移除键值对,键大小写不敏感 | key: 键 | V |
| size() | 获取Map大小 | 无 | int |
| isEmpty() | 判断Map是否为空 | 无 | boolean |
| clear() | 清空Map | 无 | void |
| keySet() | 获取键集合 | 无 | Set |
| values() | 获取值集合 | 无 | Collection |
| entrySet() | 获取键值对集合 | 无 | Set<Map.Entry<K, V>> |