java - 为什么 "boolean inclusive"版本的 NavigableSet 返回 NavigableSet,而那些没有 "boolean inclusive"版本的 NavigableSet 返回 SortedSet?

标签 java

标题说明了一切...我想知道为什么当我通过例如创建 NavigableSet 的子集时headSet(E toElement),我得到一个 SortedSet,并以 boolean Include 作为参数,即 headSet(E toElement,包含 boolean 值),我得到一个 NavigableSet

我知道 NavigableSet 扩展了 SortedSet,并且 SortedSet 有一个方法 headSet(E toElement) 返回a SortedSet,但为什么他们不决定更改子接口(interface)中的返回类型?或者还返回一个带有新添加的 headSet(E toElement, boolean Included)SortedSet,只是为了保持一致?

返回的集合只是在是否包含 toElement 方面有所不同,所以我不明白为什么它们应该具有不同的类型。

最佳答案

因为 boolean 值inclusive表示高端端点是否包含在返回的 View 中。

要检索也包含最高结束点的 Set,将调用 subset 方法,该方法返回 SortedSet 这就是您获得实例的原因。

您调用的方法headSet将调用其中的subSet,因为您指定它是包含的。

参见subSet documentation

如果您认为,如果您想处理查找最高/较低值等问题,那么使用排序集会更容易,这是合乎逻辑的。

编辑: javadoc 确实解释了这一点,感谢 @laune 指出了这一点:

Methods subSet(E, E), headSet(E), and tailSet(E) are specified to return SortedSet to allow existing implementations of SortedSet to be compatibly retrofitted to implement NavigableSet, but extensions and implementations of this interface are encouraged to override these methods to return NavigableSet.

关于java - 为什么 "boolean inclusive"版本的 NavigableSet 返回 NavigableSet,而那些没有 "boolean inclusive"版本的 NavigableSet 返回 SortedSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28546708/

相关文章:

java - 运行 Word 文档的 Runtime.getRuntime.exec() 问题

java - Objectify 中的多对多关系具有强一致性

java - 为什么我应该使用 gRPC 而不是 IPC/Simple websocket?

java - 如何显示Ant构建的进度?

java - 单击“首选项”后,共享首选项才会生效

Java 正则表达式注释和 HTTP 正文 POST 的要求

java - 将星期几列表转换为带连字符的字符串

java - 如何使用 Astyanax 执行 "' 描述“CQL 查询

java - 对 servlet 映射感到困惑

Java 8 : Unable to append new lines that show up in notepad