如何在不考虑情况的情况下检查地图中的键?[英] How to check for key in a Map irrespective of the case?

问题描述

我想知道 HashMap 中是否存在特定键,所以我使用 containsKey(key) 方法.但它是区分大小写的,即如果有一个带有名称的键并且我正在搜索名称,它不会返回 true.那么有什么方法可以让我知道而不用担心钥匙的情况吗?

谢谢

推荐答案

不适用于传统地图.

"abc"是与"ABC"不同的字符串,它们的哈希码不同,它们的equals()方法将返回false.

最简单的解决方案是在插入/检查之前简单地将所有输入转换为大写(或小写).您甚至可以编写自己的 Map 包装器来确保一致性.

如果您想保持提供的键的大小写,但不区分大小写比较,您可以考虑使用 TreeMap 并提供您自己的比较器,它将不区分大小写进行比较.但是,在沿着这条路线走之前要三思而后行,因为您会最终遇到一些不可调和的不一致 - 如果有人调用 map.put("abc", 1) 然后 map.put("ABC", 2),则存储在地图中的密钥是什么情况?你能说得通吗?如果有人将您的地图包装在标准中,您是否对此感到满意?HashMap 你会失去功能吗?或者,如果有人碰巧正在遍历您的密钥集,并且他们自己使用 equals() 进行快速"包含"检查,您会得到不一致的结果?类似的情况还会有很多.请注意,这样做违反了 Map 的合同(因为键相等是 根据键上的 equals() 方法定义),所以它在任何意义上都行不通.

维护严格的大写地图更更易于使用和维护,并且具有实际上是合法地图实现的优势.

本文地址:https://www.itbaoku.cn/post/978710.html