Java 为什么地图不扩展集合接口
为什么Java 为什么地图不扩展集合接口,java,collections,map,Java,Collections,Map,为什么java.util.Map接口不扩展java.util.Collection接口?java.util.Map不是键值对的集合吗?因为集合接口与映射接口基本不兼容。如果MapextendedCollection,那么add(Object)方法会做什么 这两个接口具有非常不同的语义。如果需要将Map的值或键作为集合,则始终可以使用keySet()/values(),因为collections中声明的某些方法不适合Map接口,反之亦然 第一个示例是Collections接口的add(Object
java.util.Map
接口不扩展java.util.Collection
接口?java.util.Map
不是键值对的集合吗?因为集合
接口与映射
接口基本不兼容。如果Map
extendedCollection
,那么add(Object)
方法会做什么
这两个接口具有非常不同的语义。如果需要将
Map
的值或键作为集合,则始终可以使用keySet()
/values()
,因为collections
中声明的某些方法不适合Map
接口,反之亦然
第一个示例是
Collections
接口的add(Object)
方法,第二个示例是
Map
接口的put(K,V)
对于地图而言,根本没有一致的方法可以明智地实现
添加(对象)
——它是一个键,还是一个值?这同样适用于put(K,V)
。数组列表中的键可能是什么 集合假定元素具有一个值。Map采用键/值对的条目。它们可以设计为重复使用相同的通用接口,但是它们实现的某些方法不兼容,例如
Collection.remove(Object) - removes an element.
Map.remove(Object) - removes by key, not by entry.
您可以将一个映射建模为一组条目,这就是Map.entrySet()
所做的
有一些共同的方法size()
,isEmpty()
,clear()
,putAll/addAll()
,但作为一个独立的接口,它们不太可能有多大价值。(同样可以使用Map.entrySet()
)所有集合都必须实现一个默认构造函数和另一个将集合作为参数的构造函数。不能使用地图以外的任何其他集合构造地图
由于映射对其可以容纳的对象类型施加了限制,因此不能将映射实现为集合
为什么java.util.Map接口
是否扩展java.util.Collection接口
Map
是一个键/值对,而Collection
是一组以结构化方式存储的对象的集合,具有指定的访问机制。Map不扩展Collections接口的原因是add(E)
不像Map的put(K,V)
那样迎合键值对
另外,如果Map
必须扩展它,集合的iterator()
方法将指向什么?键的迭代器或值的迭代器?不是。这两个构造函数不是严格的要求:它们只适用于通用集合(即,不适用于专用集合),并且写为“应该提供两个”标准“构造函数”,因此即使对于通用集合,也不是绝对必须的。