![](/img/trans.png)
[英]using Collections.binarySearch to remove duplicates from a pre-populated ArrayList
[英]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.