тип элемента позволяет рассчитать преемника данного значения
Все зависит от способа сортировки
Это означает, что для метода сортировки ваших элементов вы можете вычислить, какое отсортированное значение будет получено непосредственно после заданного значения, и между ними ничего не будет.
Из документов:
Например, предположим, что s - это отсортированный набор строк. Следующие
идиома получает представление, содержащее все строки в s от низкого до
высокий, включительно: SortedSet<String> sub = s.subSet(low, high+"\0");
Для строк: (естественная сортировка) high + "\0"
является преемником high
Для целых чисел: (натуральная сортировка) high + 1
является преемником high
. Но если ваши целые числа были отсортированы от высокого к низкому, тогда преемник будет high - 1
.
Для некоторых значений вычисление преемника немного сложнее ...
Для двойников: (естественная сортировка) Math.nextAfter(high, Double.POSITIVE_INFINITY)
является преемником high
, поскольку nextAfter
получает смежное значение после high
, так что ничто не может оказаться между high
и nextAfter(high..)
. Обратите внимание, что у вас могут возникнуть проблемы с максимальными / минимальными значениями или бесконечными значениями neg / pos для двойников, так что вы, вероятно, захотите проверить high
first
С реальными числами с плавающей точкой это не сработает (если вы не установите какое-либо ограничение на точность).
Это работает только здесь, потому что в компьютерах числа с плавающей точкой всегда без исключения имеют ограниченную точность, и, таким образом, вы можете вычислить следующее возможное значение с этой точностью (что и делает nextAfter
).