[英]Using a HashMap as a Key for another HashMap
我有一個要求,我需要使用一組值映射一組配置,理想情況下由Map<Map<String, Object>, Map<String, Object>>
結構表示。
主Map的配置和值部分都是任意的,因此,我無法使用具體的類。
請提供一些有關此結構的反饋。 可以將地圖用作另一個地圖的關鍵字。 做了一些研究,我能夠確定Map的equals方法利用所有底層的Keys&Values來將兩個Maps視為相等。 此外,Map的HashCode基於Map的Keys的Hashcodes。 這個IMO應該滿足使用Map作為關鍵字的最低要求。
在我繼續實施之前,我仍然希望有人來驗證這一點。 如果有更好的解決方案/設計,有人可以建議,請隨時這樣做。
編輯
我最終使用簡單的代字號('〜')和管道('|')分隔String作為鍵並在需要時對其進行解構。 感謝所有幫助過的人。
是的, HashMap
可以用作另一個映射的鍵,因為該類正確覆蓋了.equals()
和.hashCode()
。
然而,從廣義上講,使用可變類型 (例如HashMap
)作為Map
鍵或Set
元素是一個壞主意 ,因為如果對象在集合中發生變異,則會違反這些類所期望的不變量。
當你正在尋找不太什么, 番石榴提供了幾個額外的數據結構 ,如Multiset
, MultiMap
, BiMap
, Table
可能是有用的。 它們還提供不可變集合,例如ImmutableMap
(因為它們不能被變異)更安全地用作Map
鍵。 這並不是說你應該這樣做,只是說它是安全的(如果鍵和值也是不可變的)。
考慮發布一個問題,探討導致您得出Map<Map<K, V>, Map<K, V>>
結構的問題。 您可能會得到這個問題更好的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.