簡體   English   中英

使用ArrayList的binarySearch集合

[英]binarySearch collections using ArrayList

我為這個愚蠢的問題感到抱歉,我一直在搜索如何將binarysearch與我的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);

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

如果列表未按升序排序,則binarySearch()結果不確定。 通過反轉您的列表,它以降序排序,因此您看到的是結果。

Javadoc

在進行此調用之前,必須根據列表元素的自然順序將其按升序排序(例如通過sort(List)方法)。 如果未排序,則結果不確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM