我有一个Hashmap,其中一个String作为键,一个整数作为值。现在,我使用get方法获取值,其中字符串与键值匹配。
HashMap<String,Integer> map= new HashMap<String,Integer>();
// Populate the map
System.out.println(map.get("mystring"));
我希望此字符串比较不区分大小写。无论如何我能做到吗?
例如,我希望它在以下情况下返回相同的结果:
map.get("hello");
map.get("HELLO");
map.get("Hello");
答案 0 :(得分:3)
如果性能不重要,您可以使用TreeMap。输出以下代码:
1
6
6
请注意,您需要的行为不符合Map#get
contract:
更正式地说,如果此映射包含从键k到值v的映射,使得(key == null?k == null:key.equals(k)),则此方法返回v;否则返回null。 (最多可以有一个这样的映射。)
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
map.put("hello", 3);
map.put("HELLO", 6);
System.out.println(map.size());
System.out.println(map.get("heLLO"));
System.out.println(map.get("hello"));
}
答案 1 :(得分:1)
你可以做到
Map<String,Integer> map= new HashMap<String,Integer>() {
@Override
public Integer put(String key, Integer value) {
return super.put(key.toLowerCase(), value);
}
@Override
public Integer get(Object o) {
return super.get(o.toString().toLowerCase());
}
};
答案 2 :(得分:1)
您可以创建一个包装类来包装HashMap并实现get和put方法。
答案 3 :(得分:1)
HashMap<InsensitiveString,Integer> map= new HashMap<>();
map.get(new InsensitiveString("mystring"));
---
public class InsensitiveString
final String string;
public InsensitiveString(String string)
this.string = string;
public int hashCode()
calculate hash code based on lower case of chars in string
public boolean equals(Object that)
compare 2 strings insensitively
答案 4 :(得分:0)
编写一个包装器方法,将String
放在
map.put(string.toLowerCase());
并获取方法
map.get(string.toLowerCase());