使用ArrayList的binarySearch集合

对于这个愚蠢的问题,我感到抱歉,我一直在搜索如何在我的ArrayList中使用binarysearch,如下所示:

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);

indeks的值始终为-5,我认为应该为2,因为在反转myArrList之后,输出看起来像这样:

[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());

以上是 使用ArrayList的binarySearch集合 的全部内容, 来源链接: utcz.com/qa/401163.html

回到顶部