我们知道 Map 是一个由类 HashMap、TreeMap 实现的接口......
由于所有这些实现类都具有相同的入口模式(即键值对(, 为什么我们不应该在地图接口本身中拥有这种入口模式?
将此条目模式单独作为嵌套在映射接口中的接口的目的是什么?
提前谢谢。
Map.Entry
封装在Map
中的原因是因为它是一个非常亲密的强耦合接口,专门设计为专门用于Map
。出于您的意图和目的,您可以将其视为表示Map
中单个条目的一对(键和值(。
不同的 Map 实现对如何存储条目有不同的要求。HashMap
计算密钥的哈希代码并将其存储在其Node
实现中(扩展Map.Entry
(,而TreeMap
的Entry
具有父条目,左右子项以及节点的"颜色"等信息(因为它是一棵红黑树(。每个Map
实现都有自己的要求,因此Entry
保留为接口。
Map
接口有一个用途 - 表示键到值的映射。Map.Entry
接口有不同的用途 - 表示单个键值对。
为什么我们不应该在地图接口本身中拥有这种入口模式?
如果你的意思是问为什么不直接在Map
接口中声明Map.Entry
接口的方法,那就没有多大意义了,因为Map
包含多个键和值,那么如果getKey()
和getValue()
方法是Map
接口的一部分,它们会返回哪个键和值?
此外,当您要迭代Map
条目时,Map.Entry
接口很有用。调用entrySet()
方法并获取Set<Map.Entry<K,V>>
。