【发布时间】:2018-01-31 13:14:54
【问题描述】:
为什么NavigableMap 接口是用额外的方法定义创建并用SortedMap 扩展的,而他们本可以在SortedMap 接口中添加它并像往常一样在TreeMap 中实现它们?
互联网上充斥着各种答案,这些答案都是为了在地图上导航而提供的。这里的导航是什么意思?
【问题讨论】:
标签: java collections treemap sortedmap
为什么NavigableMap 接口是用额外的方法定义创建并用SortedMap 扩展的,而他们本可以在SortedMap 接口中添加它并像往常一样在TreeMap 中实现它们?
互联网上充斥着各种答案,这些答案都是为了在地图上导航而提供的。这里的导航是什么意思?
【问题讨论】:
标签: java collections treemap sortedmap
SortedMap 接口已经发布(从 1.2 开始)。这意味着可能有成百上千的课程依赖于SortedMap。如果您在 1.6 中向 SortedMap 添加新方法,而不提供 default 方法实现,这将破坏所有实现 SortedMap 的类。鉴于如此多的东西依赖于 Java,这将从字面上破坏地球上的一切。我希望很明显,“不破坏整个星球上的一切”是一个足够好的理由,不随意添加一些晦涩的方法(这显然是对实际情况的过度戏剧化和半开玩笑的描述如果 Java 标准库的维护者这样做了,那么没有人会使用新版本,并且可能有人会提交错误报告,就是这样)。方法lowerEntry、floorEntry、ceilingEntry和higherEntry
https://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html
这意味着您不仅可以查找和遍历,还可以找到与请求的键“接近”的条目。
【讨论】:
我不会谈论NavigateMap 有什么用途,但就为什么SortedMap 接口没有修改而不是添加新接口而言;那是因为它会破坏现有的实现。正如您所指出的,TreeMap 等可以更新以实现新方法,但是SortedMap 的自定义实现呢?因此,任何升级到 JRE 1.6+ 的遗留代码都需要搜索代码库并实现这些新方法,但 Java 宣称自己是向后兼容的(至少在添加 NavigateMap 时对于 Java 6)
【讨论】: