2011-04-18 22 views

回答

22

收集假設一個值的元素。地圖假定鍵/值對的條目。他們可能被設計爲重新使用相同的通用接口,但是他們實現的一些方法是不兼容的,例如,

Collection.remove(Object) - removes an element. 
Map.remove(Object) - removes by key, not by entry. 

您可以將Map映射爲一組條目的集合,這就是Map.entrySet()所做的。

有一些共同的方法; size(),isEmpty(),clear(),putAll/addAll(),但這些作爲獨立接口不太可能具有很多價值。 (可以使用Map.entrySet()代替)

18

因爲Collection接口在很大程度上與Map接口不兼容。如果Map擴展爲Collection,那麼add(Object)方法會做什麼?

這兩個接口具有非常不同的語義。如果您需要Map的值或密鑰作爲集合,則始終可以使用keySet()/values()

2

由於Collections中聲明的某些方法不適合Map接口,反之亦然。

用於第一一個例子是Collections接口的add(Object)方法,
第二的一個例子是Map接口的put(K, V)

根本沒有一致的方法來明智地實施add(Object)地圖 - 它是一個關鍵,它是一個價值?這同樣適用於put(K, V)。什麼可能是ArrayList的關鍵?

1

所有集合必須實現默認構造函數和另一個將集合作爲參數的構造函數。除地圖之外,您不能使用任何其他集合構建地圖。

由於Map對它可容納的對象的類型施加了限制,因此無法將地圖實現爲集合。

+1

這兩個構造函數**不是**嚴格要求:它們只適用於*通用*集合(即而不是專門的),它被寫爲「*應該*提供兩個」標準的「構造函數」,所以即使對於通用集合,它也不是絕對必須的。 – 2011-04-18 08:34:08

3

爲什麼java.util.Map接口 擴展java.util.Collection接口?

Map是一個鍵/值對,而Collection是一組存儲在以結構化方式的對象的集合,並且具有指定的訪問機制。 Map未擴展Collections界面的原因是add(E e);不支持鍵值對,如Map的put(K, V)

另外,如果Map必須擴展它,Collection iterator()方法會指向什麼?鍵的迭代器或值的迭代器?

相關問題