簡體   English   中英

使用HashMap作為另一個HashMap的鍵

[英]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元素是一個壞主意 ,因為如果對象在集合中發生變異,則會違反這些類所期望的不變量。

當你正在尋找不太什么, 番石榴提供了幾個額外的數據結構 ,如MultisetMultiMapBiMapTable可能是有用的。 它們還提供不可變集合,例如ImmutableMap (因為它們不能被變異)更安全地用作Map鍵。 這並不是說你應該這樣做,只是說它是安全的(如果鍵和值也是不可變的)。

考慮發布一個問題,探討導致您得出Map<Map<K, V>, Map<K, V>>結構的問題。 您可能會得到這個問題更好的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM