为什么接口不能扩展接口java.util.Collection
?是不是一个java.util.Map
键值对的集合?为什么Map不能扩展Collection接口
回答
收集假设一个值的元素。地图假定键/值对的条目。他们可能被设计为重新使用相同的通用接口,但是他们实现的一些方法是不兼容的,例如,
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()
代替)
因为Collection
接口在很大程度上与Map
接口不兼容。如果Map
扩展为Collection
,那么add(Object)
方法会做什么?
这两个接口具有非常不同的语义。如果您需要Map
的值或密钥作为集合,则始终可以使用keySet()
/values()
。
由于Collections
中声明的某些方法不适合Map
接口,反之亦然。
用于第一一个例子是Collections
接口的add(Object)
方法,
第二的一个例子是Map
接口的put(K, V)
。
根本没有一致的方法来明智地实施add(Object)
地图 - 它是一个关键,它是一个价值?这同样适用于put(K, V)
。什么可能是ArrayList
的关键?
所有集合必须实现默认构造函数和另一个将集合作为参数的构造函数。除地图之外,您不能使用任何其他集合构建地图。
由于Map对它可容纳的对象的类型施加了限制,因此无法将地图实现为集合。
这两个构造函数**不是**严格要求:它们只适用于*通用*集合(即而不是专门的),它被写为“*应该*提供两个”标准的“构造函数”,所以即使对于通用集合,它也不是绝对必须的。 – 2011-04-18 08:34:08
为什么java.util.Map接口 扩展java.util.Collection接口?
Map
是一个键/值对,而Collection
是一组存储在以结构化方式的对象的集合,并且具有指定的访问机制。 Map未扩展Collections界面的原因是add(E e);
不支持键值对,如Map的put(K, V)
。
另外,如果Map
必须扩展它,Collection iterator()
方法会指向什么?键的迭代器或值的迭代器?
- 1. 为什么Collection接口有equals()和hashCode()?
- 2. 为什么不能扩展数组?
- 3. 为什么ttk.Separator不能正确扩展?
- 4. 扩展Serializable接口有什么影响
- 5. 为什么不能为扩展html:5添加链接标签?
- 6. 为什么我们不能创建Collections类的实例(不是Collection接口)?
- 7. 扩展接口的方法为什么在实现扩展接口的类中不可见?
- 8. 扩展接口为字典
- 9. 我们什么时候使用接口扩展接口
- 10. 扩展接口
- 11. 扩展接口
- 12. Vaadin Field.class接口扩展了Focusable.class和Component.class !!为什么?
- 13. 为什么一些集合扩展抽象也实现接口?
- 14. 接口为什么根据类文件格式扩展Object?
- 15. 为什么Map接口不会限制关键的泛型类型来扩展Comparable?
- 16. 为什么扩展功能起作用?
- 17. 为什么不能从接口继承
- 18. List接口和Collection接口的主要区别是什么?
- 19. 为什么HashMap在扩展AbstractMap时实现Map?
- 20. Java.util.HashMap - 为什么HashMap扩展AbstractMap并实现Map?
- 21. 为什么Android org.json。*不实现Map接口?
- 22. 接口扩展TimerTask
- 23. 为什么在接口为什么不能在抽象类
- 24. 为什么不可能为'type instance'创建扩展
- 25. 如何扩展扩展类的接口
- 26. 通过接口扩展功能
- 27. Collection <?是什么?扩展myObject>的意思?
- 28. 为什么页脚扩展?
- 29. 为什么扩展Exception类?
- 30. 为什么Node.js可扩展?
它不是。 Map.entrySet()是如果实现的。 – bestsss 2011-04-18 08:12:31