Тип элемента SortedSet позволяет рассчитать преемника данного значения - PullRequest
0 голосов
/ 24 июня 2018

С SortedSet Документация:

несколько методов возвращают подмножества с ограниченными диапазонами. Такие диапазоны наполовину открыты, то есть они включают их низкую конечную точку, но не высокая конечная точка (где применимо). Если вам нужен закрытый диапазон (который включает в себя обе конечные точки), и тип элемента позволяет для расчета наследника данного значения , просто запросите поддиапазон от низкая конечная точка для преемника (высокая конечная точка).

Можете ли вы объяснить, что означает

тип элемента позволяет рассчитать преемника данного значение

Какие типы допускают вычисление наследников в Java?

Ответы [ 3 ]

0 голосов
/ 24 июня 2018

Например, весь набор содержит 1, 3, и вы хотите получить Integer в диапазоне [1, 3], если вы напрямую позвоните

s.subSet(1, 3); 

, то 3 не будет в подмножестве.

В этой ситуации вы можете вычислить следующий элемент после 3 с помощью 3 + 1 = 4 и вызвать:

s.subSet(1, 4); 

, тогда в подмножестве будет 3.

Механизм вычисления может отличаться от класса к классу.С Numberic элементами или String, вы можете вычислить преемника непосредственно +.Если вы манипулируете другим типом, вы можете настроить свой собственный метод вычисления , и он должен соответствовать методу сравнения.

0 голосов
/ 24 июня 2018

тип элемента позволяет рассчитать преемника данного значения

Все зависит от способа сортировки

Это означает, что для метода сортировки ваших элементов вы можете вычислить, какое отсортированное значение будет получено непосредственно после заданного значения, и между ними ничего не будет.

Из документов:

Например, предположим, что 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).

0 голосов
/ 24 июня 2018

Для вычисления преемников требуется, чтобы у вашего типа были дискретные значения (хотя этого недостаточно).

Integer является хорошим примером этого - преемник 2 равен 3. Преемник 3 является 4.

...