使用ArrayList的binarySearch集合

时间:2016-06-07 02:12:04

标签: java arraylist

我很抱歉这个愚蠢的问题,我一直在搜索如何在我的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 ...? 提前致谢

2 个答案:

答案 0 :(得分:2)

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

  

在进行此调用之前,必须根据元素的自然顺序(通过sort(List)方法)将列表按升序排序。如果未排序,则结果未定义。

如果要在降序列表中进行二分查找,请使用Comparator.reverseOrder()

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

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

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

Collections.sort(arrList, Comparator.reverseOrder());

答案 1 :(得分:0)

如果列表未按升序顺序排序,则

binarySearch()结果未定义。通过反转列表,它按降序排序,从而得到您所看到的结果。

来自Javadoc

  

列表必须按照自然顺序按升序排序   在制作之前对其元素的排序(通过sort(List)方法)   这个电话。如果未排序,则结果未定义。