为什么
java.util.Map
接口不继承 java.util.Collection
接口呢?难道 java.util.Map
不是一个 Key-Value 对的集合吗?java.util.Map
接口不继承 java.util.Collection
接口呢?难道 java.util.Map
不是一个 Key-Value 对的集合吗?集合(Collection)假设元素具有单一值。映射(Map)假设条目由键/值对组成。它们可能已被设计为重用相同的公共接口,但是它们实现的某些方法不兼容,例如:
Collection.remove(Object) - removes an element.
Map.remove(Object) - removes by key, not by entry.
你可以将一个Map建模为条目的集合,这就是Map.entrySet()所做的事情。Collection
接口与Map
接口在很大程度上不兼容。如果Map
扩展了Collection
,那么add(Object)
方法会做什么呢?Map
的值或键,则始终可以使用keySet()
/values()
。所有集合都必须实现一个默认构造函数和另一个以集合为参数的构造函数。你不能使用除了map之外的任何其他集合来构造一个map。
由于Map对它可以持有的对象类型施加了限制,因此你不能将Map实现为一个集合。