3 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
通常,Arrays.binarySearch假設(shè)數(shù)組中的項(xiàng)目已按其自然順序排序。如果不以這種方式排序,則二分搜索算法將不起作用。
您Comparator正在按自然順序的相反順序排序,因此算法找不到紐約市。
但是它的重載binarySearch需要 aComparator,因此算法可以假設(shè)它的排序方式與Comparator定義順序的方式相同。
數(shù)組必須根據(jù)指定的比較器按升序排序(如sort(T[], Comparator) method)在進(jìn)行此調(diào)用之前。
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));
然后你會(huì)得到正確的輸出2。

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
使用二分搜索時(shí),被搜索的數(shù)據(jù)對(duì)象數(shù)組必須根據(jù)用于搜索的比較器排序。
在您的示例中,城市沒(méi)有任何特定順序,因此搜索將不起作用。
您的比較器按逆字母順序排序,因此數(shù)組也必須按逆字母順序排列。

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
Arrays.binarySearch需要數(shù)組按升序排序,但在您的情況下,您將其降序。如果您使用下面的更改比較函數(shù),它將按升序排序
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
因此,如果您按升序?qū)ζ溥M(jìn)行排序,它將起作用
添加回答
舉報(bào)