2011-04-18 26 views

回答

22

收集假设一个值的元素。地图假定键/值对的条目。他们可能被设计为重新使用相同的通用接口,但是他们实现的一些方法是不兼容的,例如,

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()代替)

18

因为Collection接口在很大程度上与Map接口不兼容。如果Map扩展为Collection,那么add(Object)方法会做什么?

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

2

由于Collections中声明的某些方法不适合Map接口,反之亦然。

用于第一一个例子是Collections接口的add(Object)方法,
第二的一个例子是Map接口的put(K, V)

根本没有一致的方法来明智地实施add(Object)地图 - 它是一个关键,它是一个价值?这同样适用于put(K, V)。什么可能是ArrayList的关键?

1

所有集合必须实现默认构造函数和另一个将集合作为参数的构造函数。除地图之外,您不能使用任何其他集合构建地图。

由于Map对它可容纳的对象的类型施加了限制,因此无法将地图实现为集合。

+1

这两个构造函数**不是**严格要求:它们只适用于*通用*集合(即而不是专门的),它被写为“*应该*提供两个”标准的“构造函数”,所以即使对于通用集合,它也不是绝对必须的。 – 2011-04-18 08:34:08

3

为什么java.util.Map接口 扩展java.util.Collection接口?

Map是一个键/值对,而Collection是一组存储在以结构化方式的对象的集合,并且具有指定的访问机制。 Map未扩展Collections界面的原因是add(E e);不支持键值对,如Map的put(K, V)

另外,如果Map必须扩展它,Collection iterator()方法会指向什么?键的迭代器或值的迭代器?

相关问题