为什么java.util.Map接口不扩展java.util.Collection接口?java.util.Map不是键值对的集合吗?
发布于 2011-04-18 16:16:16
集合假定元素为一个值。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() )
发布于 2011-04-18 16:15:07
因为Collection接口在很大程度上与Map接口不兼容。如果Map扩展了Collection,add(Object)方法会做什么?
这两个接口具有非常不同的语义。如果您需要Map的值或键作为集合,则始终可以使用keySet()/values()。
发布于 2011-04-18 16:15:21
因为在Collections中声明的一些方法不适合Map接口,反之亦然。
第一个示例是Collections接口的add(Object)方法,
第二种方法的一个例子是Map接口的put(K, V)。
没有一致的方法来合理地实现映射的add(Object) -它是一个键,还是一个值?同样的道理也适用于put(K, V)。什么可能是ArrayList中的密钥
https://stackoverflow.com/questions/5700135
复制相似问题