【问题标题】:Why we have separate Interface called Entry which is nested in Map Interface in JAVA为什么我们有单独的接口,称为 Entry,它嵌套在 JAVA 的 Map 接口中
【发布时间】:2023-03-24 20:50:02
【问题描述】:

我们知道 Map 是一个由 HashMap、TreeMap 类实现的接口...

由于所有这些实现类都具有相同的条目模式(即键值对), 为什么我们不应该在 Map Interface 本身中使用这种 Entry 模式?

将这个 Entry 模式单独设置为嵌套在 Map Interface 中的 Interface 的目的是什么?

提前致谢。

【问题讨论】:

  • Map 在某种意义上是Entry 对象的集合。您如何期望它成为一个条目?你能举个例子说明Map 将如何被定义为实现Entry 的接口/合同吗?
  • 他们本可以这样做,但是由于Entry属于Map,我相信他们想把它放在Map接口中。
  • 我同意。正如您所说, Map 是 Entry 对象的集合,但我的问题是为什么我们需要将此条目设计为单独的接口,因为所有映射实现类都具有与条目相同的对象模式。为什么我们没有在 'Entry' 接口中声明的所有方法都没有在 'Map' 本身中声明? @欧内斯特·基维尔
  • @Anonymous 单个Entry 的方法与该单个条目相关。 Map 的方法与所有条目相关。 Entry有一个方法getKey(),如果在Map里面,会返回哪个key?

标签: java oop


【解决方案1】:

Map.Entry 封装在Map 中的原因是因为它是一个非常紧密的强耦合接口,专门设计用于专门用于Map。出于您的意图和目的,您可以将其视为一对(键和值),代表Map 中的一个条目。

不同的 Map 实现对如何存储条目有不同的要求。 HashMap 计算密钥的哈希码并将其存储在其Node 实现中(扩展Map.Entry),而TreeMapEntry 具有父条目、左右子项和节点的“颜色”(因为它是红黑树)。每个Map 实现都有自己的要求,因此Entry 被保留为接口。

【讨论】:

    【解决方案2】:

    Map 接口有一个目的 - 表示键到值的映射。 Map.Entry 接口有不同的用途 - 表示单个键值对。

    为什么我们不应该在 Map Interface 本身中使用这种 Entry 模式?

    如果你的意思是问为什么不直接在Map 接口中声明Map.Entry 接口的方法,那没有多大意义,因为Map 包含多个键和值,那么哪个键和如果getKey()getValue() 方法是Map 接口的一部分,它们会返回值吗?

    此外,当您想要迭代 Map 的条目时,Map.Entry 接口非常有用。您调用entrySet() 方法并获得Set<Map.Entry<K,V>>

    【讨论】:

    • IMO 他的意思是为什么Map.Entry 接口嵌套在Map 接口中,而不是在它自己的文件中,所以这不应该是答案。
    猜你喜欢
    • 2011-04-01
    • 2012-12-11
    • 2014-04-07
    • 2018-10-24
    • 2012-11-06
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多