我对这Map<?,?>不是一个事实感到惊讶Collection<?>.
我认为如果宣布这样的话会有很多意义:
public interface Map<K,V> extends Collection<Map.Entry<K,V>>
Run Code Online (Sandbox Code Playgroud)
毕竟,一个Map<K,V>是集合Map.Entry<K,V>,不是吗?
那么为什么没有这样实现呢?
感谢Cletus提供了最权威的答案,但我仍然想知道为什么,如果您已经可以查看Map<K,V>as Set<Map.Entries<K,V>>(via entrySet()),它不仅仅是扩展该界面.
如果a
Map是aCollection,那么元素是什么?唯一合理的答案是"键值对"
确切地说,interface Map<K,V> extends Set<Map.Entry<K,V>>会很棒!
但这提供了非常有限(并且不是特别有用)的
Map抽象.
但如果是这种情况那么为什么entrySet界面指定?它必须以某种方式有用(我认为这个位置很容易争论!).
您不能询问给定键映射到的值,也不能删除给定键的条目而不知道它映射到的值.
我不是说这就是它的全部内容Map!它可以而且应该保留所有其他方法(除了entrySet现在多余的方法)!
如果您查看集合框架,您将看到以下内容,但Map不在接口列表中.当我们谈论地图时,我们说它是集合框架的一部分,所以如果Map是集合框架的一部分,那么为什么它不在接口列表中.
java.util
Interface Collection
All Known Subinterfaces:
BeanContext, BeanContextServices, List, Set, SortedSet
All Known Implementing Classes:
AbstractCollection, AbstractList, AbstractSet, ArrayList, BeanContextServicesSupport, BeanContextSupport, HashSet, LinkedHashSet, LinkedList, TreeSet, Vector
Run Code Online (Sandbox Code Playgroud) 我明白要迭代一个Map,我需要使用该entrySet()方法,然后使用Iterator结果Set.我觉得这个问题可能很愚蠢,但是,如何Map正确实施以便Iterator直接使用它是不可能的?据我所知,Map它不是一个集合,Iterator而是用于集合.但从逻辑上讲,它也不Map是键值对的集合(虽然它没有实现Collection接口)?