为什么Map不扩展Collection接口

Swa*_*rma 15 java collections map

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

Pet*_*rey 27

集合假设一个值的元素.Map假定键/值对的条目.它们可以被设计为重用相同的公共接口,但是它们实现的某些方法是不兼容的,例如

Collection.remove(Object) - removes an element.
Map.remove(Object) - removes by key, not by entry.
Run Code Online (Sandbox Code Playgroud)

您可以将Map建模为条目集合,这就是做什么的Map.entrySet().

有一些共同的方法; size(),isEmpty(),clear(),putAll/addAll()但这些都不太可能有多少价值作为一个独立的接口.(Map.entrySet()可以再次使用)


Hen*_*ing 19

因为Collection界面很大程度上与Map界面不兼容.如果Map扩展Collection,该add(Object)方法会做什么?

这两个接口具有非常不同的语义.如果您需要Mapas作为集合的值或键,则可以始终使用keySet()/ values().