最佳答案
令我惊讶的是 Map<?,?>不是 Collection<?>。
我认为,如果它被宣布为这样的话,会有很大的意义:
public interface Map<K,V> extends Collection<Map.Entry<K,V>>
毕竟,Map<K,V>是 Map.Entry<K,V>的集合,不是吗?
那么为什么没有这样实现呢?
感谢 Cletus 提供的最权威的答案,但我仍然想知道为什么,如果您已经可以将 Map<K,V>视为 Set<Map.Entries<K,V>>(通过 entrySet()) ,它不仅仅扩展了该接口。
如果一个
Map是一个Collection,元素是什么? 唯一合理的答案是“键-值对”
没错,interface Map<K,V> extends Set<Map.Entry<K,V>>就太棒了!
但是这提供了一个非常有限的(并不特别有用的)
Map抽象。
但是如果是这样的话,那么为什么 entrySet是由接口指定的呢?它必须是有用的(而且我认为为这种立场辩护很容易!).
您不能询问给定键映射到什么值,也不能在不知道它映射到什么值的情况下删除给定键的条目。
我不是说这就是 Map的全部!它可以和 应该保持所有其他方法(除了 entrySet,它现在是冗余的) !