爲什麼接口不能擴展接口java.util.Collection
?是不是一個java.util.Map
鍵值對的集合?爲什麼Map不能擴展Collection接口
回答
收集假設一個值的元素。地圖假定鍵/值對的條目。他們可能被設計爲重新使用相同的通用接口,但是他們實現的一些方法是不兼容的,例如,
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()
代替)
因爲Collection
接口在很大程度上與Map
接口不兼容。如果Map
擴展爲Collection
,那麼add(Object)
方法會做什麼?
這兩個接口具有非常不同的語義。如果您需要Map
的值或密鑰作爲集合,則始終可以使用keySet()
/values()
。
由於Collections
中聲明的某些方法不適合Map
接口,反之亦然。
用於第一一個例子是Collections
接口的add(Object)
方法,
第二的一個例子是Map
接口的put(K, V)
。
根本沒有一致的方法來明智地實施add(Object)
地圖 - 它是一個關鍵,它是一個價值?這同樣適用於put(K, V)
。什麼可能是ArrayList
的關鍵?
所有集合必須實現默認構造函數和另一個將集合作爲參數的構造函數。除地圖之外,您不能使用任何其他集合構建地圖。
由於Map對它可容納的對象的類型施加了限制,因此無法將地圖實現爲集合。
這兩個構造函數**不是**嚴格要求:它們只適用於*通用*集合(即而不是專門的),它被寫爲「*應該*提供兩個」標準的「構造函數」,所以即使對於通用集合,它也不是絕對必須的。 – 2011-04-18 08:34:08
爲什麼java.util.Map接口 擴展java.util.Collection接口?
Map
是一個鍵/值對,而Collection
是一組存儲在以結構化方式的對象的集合,並且具有指定的訪問機制。 Map未擴展Collections界面的原因是add(E e);
不支持鍵值對,如Map的put(K, V)
。
另外,如果Map
必須擴展它,Collection iterator()
方法會指向什麼?鍵的迭代器或值的迭代器?
- 1. 爲什麼Collection接口有equals()和hashCode()?
- 2. 爲什麼不能擴展數組?
- 3. 爲什麼ttk.Separator不能正確擴展?
- 4. 擴展Serializable接口有什麼影響
- 5. 爲什麼不能爲擴展html:5添加鏈接標籤?
- 6. 爲什麼我們不能創建Collections類的實例(不是Collection接口)?
- 7. 擴展接口的方法爲什麼在實現擴展接口的類中不可見?
- 8. 擴展接口爲字典
- 9. 我們什麼時候使用接口擴展接口
- 10. 擴展接口
- 11. 擴展接口
- 12. Vaadin Field.class接口擴展了Focusable.class和Component.class !!爲什麼?
- 13. 爲什麼一些集合擴展抽象也實現接口?
- 14. 接口爲什麼根據類文件格式擴展Object?
- 15. 爲什麼Map接口不會限制關鍵的泛型類型來擴展Comparable?
- 16. 爲什麼擴展功能起作用?
- 17. 爲什麼不能從接口繼承
- 18. List接口和Collection接口的主要區別是什麼?
- 19. 爲什麼HashMap在擴展AbstractMap時實現Map?
- 20. Java.util.HashMap - 爲什麼HashMap擴展AbstractMap並實現Map?
- 21. 爲什麼Android org.json。*不實現Map接口?
- 22. 接口擴展TimerTask
- 23. 爲什麼在接口爲什麼不能在抽象類
- 24. 爲什麼不可能爲'type instance'創建擴展
- 25. 如何擴展擴展類的接口
- 26. 通過接口擴展功能
- 27. Collection <?是什麼?擴展myObject>的意思?
- 28. 爲什麼頁腳擴展?
- 29. 爲什麼擴展Exception類?
- 30. 爲什麼Node.js可擴展?
它不是。 Map.entrySet()是如果實現的。 – bestsss 2011-04-18 08:12:31