为什么接口不能扩展接口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. 为什么不能为扩展html:5添加链接标签?
- 5. 为什么我们不能创建Collections类的实例(不是Collection接口)?
- 6. 扩展接口的方法为什么在实现扩展接口的类中不可见?
- 7. 扩展接口为字典
- 8. 为什么Map接口不会限制关键的泛型类型来扩展Comparable?
- 9. 接口为什么根据类文件格式扩展Object?
- 10. 为什么扩展功能起作用?
- 11. 为什么Android org.json。*不实现Map接口?
- 12. Java.util.HashMap - 为什么HashMap扩展AbstractMap并实现Map?
- 13. 为什么在接口为什么不能在抽象类
- 14. 如何扩展扩展类的接口
- 15. 为什么在编写c#中的shell扩展时接口不继承工作?
- 16. 为什么扩展菜单不显示?
- 17. 为什么Stream.CopyTo不是扩展方法?
- 18. 为什么PHP不加载SQLite扩展?
- 19. 为什么SQLException不会扩展IOException?
- 20. 为什么扩展grep不起作用?
- 21. 接口扩展接口属性
- 22. Scala扩展了Java接口,类型为
- 23. 为什么我的AJAX请求不能扩展OWIN MVC会话?
- 24. 为什么我不能在扩展List的类中调用OrderBy?
- 25. PHP:为什么不可能扩展多个类?
- 26. 为什么不可能在Java中扩展注释?
- 27. 为什么我不能在Python中扩展bool?
- 28. 为什么孩子垂直边距不能扩展父容器?
- 29. 为什么我不能强制表单元素扩展到957px?
- 30. 为什么我的Chrome扩展不能自动更新?
它不是。 Map.entrySet()是如果实现的。 – bestsss 2011-04-18 08:12:31