2011-10-27 70 views
3

我正在尋找一個可包含一個值的兩個或更多個鍵的Java Map類。它幾乎和Apache公共集合中的MultiKeyMap類似,但它只能使用其中一個鍵來檢索值而不是使用所有鍵。對於一個值可以包含兩個或更多個鍵的Java Map類

例如創建的地圖值與鍵「key1的」和「KEY2」的條目的「Hello World」:

map.put("Hello World", "key1", "key2"); 

然後,如果我想要得到的價值,我可以使用兩種可能方法:

String value = map.get("key1"); 

String value = map.get("key2"); 


在MultiKeyMap,你需要指定所有的鍵以檢索值:

String value = map.get("key1", "key2"); 


UPDATE:
有人告訴我使用一般的地圖類,但我不知道,如果具有兩個指向相同值的鍵的映射將生成兩個重複值或不在內存中。所以誰都可以證實這一點?

+0

目前還不清楚爲什麼使用標準的'Map'不起作用。 'Map'可以包含來自不同鍵的映射到相同的值。您想要刪除所有其他相關密鑰的問題是否存在? –

+0

那麼如果你沒有指定兩個鍵,可以返回幾個值,map.get(「key1」)應該返回一個字符串集合 –

+0

@Maurice:OP在哪裏說他想要將一個鍵映射到多個值?我不確定你是否按照我(或OP)的方式閱讀這個問題。 –

回答

6

爲什麼不直接在常規地圖上重複每個鍵的值?

+0

是的,它可以使用這種方式,但我不確定具有兩個指向相同值的鍵的映射是否會生成兩個重複值或不在內存中。所以誰都可以證實這一點? – null

+3

地圖將僅保存對該對象的引用,而不會複製它。 –

+0

將東西放入地圖不會生成您的對象,它們已經存在。你擔心表演嗎?我們在談論什麼尺寸的地圖和對象? – dbrin

1

嗯,在我看來,像你可以近似你想要什麼做:

map.put("key1", "Hello World"); 
map.put("key2", "Hello World"); 

然後key1key2都將返回的「Hello World」。

當然,這不會做的是將邏輯上重複的值合併爲單個引用。但是,你甚至想要這樣做嗎?如果您在地圖中放置任何可變類型,看起來這樣的事情可能會導致混淆副作用。

+0

不幸的是,今天在這裏沒有第二個獎項 – Bohemian

+0

是的,它可以使用這種方式,但我不確定具有兩個指向相同值的鍵的映射是否會在內存中生成兩個重複值。所以誰都可以證實這一點? – null

+2

該映射實際上包含_references_對象,因此可以將兩個不同的鍵映射到一個值的兩個引用。如果在類中使用兩次字符串文字「Hello World」,則只會創建一個字符串實例。您可以通過使用==運算符和兩個映射值來驗證這一點,以檢查引用是否引用同一個對象。 – prunge

相關問題