2010-01-21 65 views
1

我們可以做一個實現地圖的集合嗎?謝謝。收藏和地圖

+0

你的意思是「地圖(高階函數)」或「關聯數組」? http://en.wikipedia.org/wiki/Map_(disambiguation) – MBO 2010-01-21 21:22:40

+5

這已經是第三個與您在短時間內詢問的藏品/地圖有關的問題了。你應該真的嘗試用一個聰明的方式將這個問題分組在一個問題中。即詳細描述整個功能需求,詳細闡述現有實現失敗的原因/方式。不要在不同的主題上發佈主題,只會對**你**和** **產生不利影響。閱讀:http://catb.org/esr/faqs/smart-questions。html – BalusC 2010-01-21 21:26:13

回答

4

根據定義,地圖是一個「集合」。但是,如果實施Map interface,則不會有Collection的子類,因爲Map接口不會擴展Collection interface。原因是地圖對鍵值對有效,而集合只是將單個對象組合在一起。

MapCollection接口之間也有一些衝突。例如,你將不得不實施toArray,對我而言,在地圖上沒有意義。另外,remove方法有不同的簽名。

+1

@Thomas - 地圖上的toArray可能是一個Map.Entry數組。但是,刪除點仍然有效。 – MetroidFan2002 2010-01-21 21:26:46

+1

確實如此,但它在地圖上是一個模糊的函數,IMO。它會返回一個數組,以便我%2 == 0是鍵和i%2 == 1是值嗎?或者只是價值觀?或者只是鍵? – 2010-01-21 21:42:57

2

有兩種方法可以理解這個問題。

在技術層面上,一個類可以同時實現兩個接口嗎?不,因爲remove方法在兩個接口之間不兼容(一個返回Object,另一個返回Boolean)。

在概念層面上,Map的Map.EntrySet是Map的集合表示,所以當你需要一個Collection時,你可能會利用它。

如果您只是想要Map中值的集合,只需使用Map.values()方法即可。

1

是的,你可以用一個類實現兩個不同的接口。 編輯:除去remove方法中的不兼容性。 (謝謝托馬斯)

但是,在這種情況下,您可以使用Map的一些實現並使用Map.entrySet(),Map.keySet()和Map.values()返回一個條目,鍵和值集合respectivelly。

這取決於什麼?如果你需要有序地訪問密鑰集或許你應該使用TreeMap,則保持並下令鍵的樹,你可以訪問和怎麼樣,你有興趣的集合。

1

這是不可能由於具有相同簽名的Collection和Map接口上的remove方法的返回類型不兼容。

返回類型爲boolean

java.util.Collection 
public boolean remove(Object o) 

返回類型爲java.lang.Object

java.util.Map 
public Object remove(Object key)