Двоичный поиск работает, но если на самом деле у вас есть отсортированный набор значений, то вместо List
, SortedSet
(или даже лучше NavigableSet
), является наиболее естественной структурой данных для выбора.
Вот пример использования:
NavigableSet<Integer> nums = new TreeSet<Integer>(
Arrays.asList(9,1,5,7,3)
);
System.out.println(nums); // "[1, 3, 5, 7, 9]"
System.out.println(nums.first()); // "1"
System.out.println(nums.last()); // "9"
System.out.println(nums.higher(3)); // "5"
System.out.println(nums.lower(8)); // "7"
System.out.println(nums.subSet(2,8)); // "[3, 5, 7]"
System.out.println(nums.subSet(1, true, 5, true)); // "[1, 3, 5]"
Также есть NavigableMap
аналог, который может быть еще более полезнымв некоторых сценариях.