使用 ArrayList 进行二进制搜索集合

2023-12-04

我很抱歉这个愚蠢的问题,我一直在寻找如何将二进制搜索与我的 ArrayList 一起使用,如下所示:

List<Integer> arrList = new ArrayList<Integer>();       
        arrList.add(3); 
        arrList.add(5); 
        arrList.add(7);
        arrList.add(2);

问题是当我使用时:

Collections.sort(arrList);
Collections.reverse(arrList);
int indeks = Collections.binarySearch(arrList, 7);

index 的值始终是 -5,我认为它应该是 2,因为反转 myArrayList 后输出如下所示:

[7, 5, 3, 2]

那么我应该在这里做什么才能获得正确的索引 7...? 提前致谢


Collections.binarySearch()期望元素按升序排列:

该列表必须根据其元素的自然顺序(如sort(List)方法)在进行此调用之前。如果未排序,则结果不确定。

如果您想对降序列表进行二分搜索,请使用Comparator.reverseOrder():

int indeks = Collections.binarySearch(arrList, 7, Comparator.reverseOrder());

indeks现在是 0,对应于列表的第一个元素。

请注意,您可以使用相同的比较器对列表进行降序排序,而不是先升序排序然后反转:

Collections.sort(arrList, Comparator.reverseOrder());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ArrayList 进行二进制搜索集合 的相关文章

随机推荐