Java?是區分大小寫的,普通的Map例如HashMap如果其中的key="ABC"?value="XXX"
那么map.get("Abc")?或?map.get("abc")是獲取不到值得。
但Spring中產生了一個忽略大小寫的map使我產生了好奇
例如?jdbcTemplate.queryForList(sql)產生的?List
key="BID"?value="STR1"
其中key都是大寫的
但如果用
System.out.println("map.get(BILLIDS):"?+?map.get("BID")?);
System.out.println("map.get(billids):"?+?map.get("bid")?);
System.out.println("map.get(bIlLIds):"?+?map.get("bId")?);
都可以查出=STR1
請問這是怎么做到的?
Spring用的是自己封裝的Map:org.springframework.util.LinkedCaseInsensitiveMap,基于java.util.LinkedHashMap封裝的。
LinkedCaseInsensitiveMap有一個成員變量Map?caseInsensitiveKeys,小寫后的Key與真實key的映射關系,get的時候先把你傳入的key轉小寫得到真實的KEY,然后得到對應value,所以大小寫不敏感了。
但其實key還保持本色的,所以如果序列化為json或者xml格式,key是大寫,這是需要注意的。
public?Object?put(String?key,?Object?value)
{
caseInsensitiveKeys.put(convertKey(key),?key);
return?super.put(key,?value);
}
public?Object?get(Object?key)
{
if(key?instanceof?String)
return?super.get(caseInsensitiveKeys.get(convertKey((String)key)));
else
return?null;
}