我正在查看 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它將在您添加而不是更改鍵時打印它。沒有第二張地圖就無法存檔。
添加回答
舉報
0/150
提交
取消