为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 LinkedCaseInsensitiveMap 同时使用 LinkedHashMap

为什么 LinkedCaseInsensitiveMap 同时使用 LinkedHashMap

眼眸繁星 2022-10-12 10:08:59
我正在查看 LinkedCaseInsensitiveMap 的结构(spring framework 5.0.5.RELEASE)。我很好奇为什么 LinkedCaseInsensitiveMap 同时使用 LinkedHashMap 和 HashMap,为什么不直接使用 LinkedHashMap 呢?private final LinkedHashMap<String, V> targetMap;   public V get(Object key) {      if (key instanceof String) {         return this.targetMap.get(convertKey((String) key));      }      return null;   }

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

private final LinkedHashMap<String, V> targetMap;


private final HashMap<String, String> caseInsensitiveKeys;

在这种情况下targetMap,包含到您的对象的真实大小写字符串,并caseInsensitiveKeys包含将您的小写键映射到您的真实大小写键。


它允许在您进行 for-each 迭代时向您显示实际大小写键,但同时它允许您不区分大小写。


所以说,下面的代码:


LinkedCaseInsensitiveMap<Object> map = new LinkedCaseInsensitiveMap<>();

map.put("MyCustomObject", new Object());

将放入"MyCustomObject" -> new Object(),targetMap并"mycustomobject" -> "MyCustomObject"放入caseInsensitiveKeys. 现在,如果您尝试打印您的所有对象,map它将在您添加而不是更改键时打印它。没有第二张地图就无法存档。


查看完整回答
反对 回复 2022-10-12
  • 1 回答
  • 0 关注
  • 161 浏览

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号