为什么Map不扩展Collection接口


问题内容

为什么java.util.Map接口不扩展java.util.Collection接口?不是java.util.Map键值对的集合吗?


问题答案:

集合假定一个值的元素。映射假定键/值对的条目。他们本来可以重新使用相同的通用接口,但是它们实现的某些方法不兼容,例如

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()可以再次使用)