在Java Collections.binarysearch()适用于按升序排序的排序列表。有没有一种简单的方法可以对具有降序的列表进行二进制搜索?
更改列表不是一个选项
答案 0 :(得分:5)
有一个overload of binarySearch()
接受自定义Comparator
。称之为一个,传递一个反转普通比较结果的比较器。
例如,如果您有List<Integer>
,请致电:
int index = Collections.binarySearch<Integer>(
intList, Integer.valueOf(1), Collections.reverseOrder());
(感谢@MarkPeters使用`Collections.reverseOrder()。)
答案 1 :(得分:3)
使用Guava的Lists#reverse()
创建列表的反向视图,并将视图传递到Collections#binarySearch()
。原始列表中的索引是列表的长度减去binarySearch()
返回的值。