2017-02-17 85 views
4

我有一個需求,我需要將一組配置映射到一組值,理想情況下用Map<Map<String, Object>, Map<String, Object>>結構表示。使用HashMap作爲另一個HashMap的關鍵字

這兩個配置&主Map的值部分是任意的&因此,我無法使用具體的類。

請提供一些關於此結構的反饋。地圖可以用作另一個地圖的關鍵字。做了一些研究後,我能夠確定Map的等號方法利用所有底層的Keys值將兩個地圖視爲相等。另外,Map的HashCode基於Map的Keys的HashCode。 IMO應該滿足使用地圖作爲關鍵的最低要求。

在繼續執行之前,我仍然希望有人驗證這一點。如果有人可以提出更好的解決方案/設計,請隨時這樣做。

EDIT

我結束了使用簡單的代字號( '〜')&管( '|')分隔的字符串作爲關鍵&解構它在需要時。感謝所有的幫助。

+6

您沒有這個要求。你只認爲你這樣做。 – Raedwald

+0

你可能會以某種方式將它拼湊在一起,但我認爲你應該退一步,並100%確定你不能使用String或Pojo作爲關鍵。 –

+2

構圖地圖的地圖是你應該創建一些單獨的類的線索。 –

回答

16

是的,HashMap可以被用來作爲重點另一個地圖,作爲類正確覆蓋.equals().hashCode()

但是它從廣義上講一個bad idea to use mutable types(如HashMap)作爲Map鍵或Set元素,因爲你違反了不變,如果對象而徵收的突變這些類的期望。

MultisetMultiMapBiMapTable這可能是有用的雖然不是你要找比較什麼,Guava提供了幾種additional data structures。他們還提供immutable collections,如ImmutableMap哪些(因爲它們不能被突變)更安全地用作Map密鑰。這不是說你應該這樣做,只是它是安全的(如果鍵和值也是不可變的)。

考慮發佈一個問題,探討導致您得出結論Map<Map<K, V>, Map<K, V>>結構的問題是您需要的。你可能會得到更好的回答的問題。

+0

這很有道理,我完全忽視了不變性,將研究不可變的集合 – Sumit

+0

@Sumit,很高興提供幫助,但也請考慮其他數據結構 - 嵌套地圖通常是代碼味道,並且可能很快變得難以工作用。 – dimo414