SortedSet 的元素类型允许计算给定值的后继

Element type of SortedSet allows for calculation of the successor of a given value

来自 SortedSet 文档:

several methods return subsets with restricted ranges. Such ranges are half-open, that is, they include their low endpoint but not their high endpoint (where applicable). If you need a closed range (which includes both endpoints), and the element type allows for calculation of the successor of a given value, merely request the subrange from lowEndpoint to successor(highEndpoint).

你能解释一下是什么意思吗

the element type allows for calculation of the successor of a given value

哪些类型允许计算 Java 中的后继者?

允许计算后继需要您的类型具有离散值(尽管这还不够)。

Integer 就是一个很好的例子 - 2 的继任者是 33 的继任者是 4.

比如整个集合包含1, 3,想得到[1, 3]之间的Integer,如果直接调用

s.subSet(1, 3); 

则3不在子集中

这种情况下,可以通过3 + 1 = 4计算出3之后的下一个元素,然后调用:

s.subSet(1, 4); 

那么子集中就有3个

计算机制可能与 class 和 class 不同。有Numberic个元素或String个,可以直接用+计算后继。如果你在其他类型上操作,你可以自定义你自己的calculation方法,它应该和compare方法一致。

the element type allows for calculation of the successor of a given value

全看排序方式

这意味着,对于元素的排序方法,您可以计算出什么排序值将紧跟在给定值之后,它们之间不可能有任何内容。

来自文档:

For example, suppose that s is a sorted set of strings. The following idiom obtains a view containing all of the strings in s from low to high, inclusive: SortedSet<String> sub = s.subSet(low, high+"[=10=]");

对于字符串: (自然排序) high + "[=11=]"high[=26= 的继承者]

对于整数: (自然排序) high + 1high 的继承者。 但是如果你的整数是从高到低排序的,那么后继者将是high - 1


对于某些值,计算后继者稍微复杂一些...

对于双打: (自然排序) Math.nextAfter(high, Double.POSITIVE_INFINITY)high 的继承者,因为 nextAfter 获取 high 之后的相邻值,这样 highnextAfter(high..) 之间就不会出现任何内容。 请注意,您可能 运行 遇到双打 max/min 值或 neg/pos 无穷大值的问题,因此您可能需要先检查 high

对于现实世界中的浮点数,这是行不通的(除非您对精度设置了一些限制)。 这仅适用于此处,因为在计算机中,浮点数 总是毫无例外地 具有有限的精度,因此您可以计算该精度的下一个可能值(这就是 nextAfter 所做的)。