3 回答

TA貢獻1877條經驗 獲得超6個贊
通常,Arrays.binarySearch假設數組中的項目已按其自然順序排序。如果不以這種方式排序,則二分搜索算法將不起作用。
您Comparator正在按自然順序的相反順序排序,因此算法找不到紐約市。
但是它的重載binarySearch需要 aComparator,因此算法可以假設它的排序方式與Comparator定義順序的方式相同。
數組必須根據指定的比較器按升序排序(如sort(T[], Comparator) method)在進行此調用之前。
Comparator在您的binarySearch通話中重用您的。
String[] places = {"Bangalore","Pune","San Francisco","New York City"};
Comparator<String> c = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
};
Arrays.sort(places, c);
System.out.println(Arrays.binarySearch(places, "New York City", c));
然后你會得到正確的輸出2。

TA貢獻1799條經驗 獲得超6個贊
使用二分搜索時,被搜索的數據對象數組必須根據用于搜索的比較器排序。
在您的示例中,城市沒有任何特定順序,因此搜索將不起作用。
您的比較器按逆字母順序排序,因此數組也必須按逆字母順序排列。

TA貢獻1877條經驗 獲得超1個贊
Arrays.binarySearch需要數組按升序排序,但在您的情況下,您將其降序。如果您使用下面的更改比較函數,它將按升序排序
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
因此,如果您按升序對其進行排序,它將起作用
添加回答
舉報