[英]binarySearch with custom Comparator-object not checking first element
我正在嘗試使用java.util.Arrays.binarySearch
創建自定義Comparator對象。
我想在數組中搜索一個String,它的反向值等於目標String元素的反向值(啞,我知道,但它只是為了學習)。
但是,當我嘗試在數組上運行binarySearch
時,除了數組元素0之外,所有元素都正確匹配。
比較:
class SearchComparator<T extends Comparable<T>> implements Comparator<T> {
public int compare(T s1, T s2) {
String reverse1 = new StringBuilder((String)s1).reverse().toString();
String reverse2 = new StringBuilder((String)s2).reverse().toString();
return reverse1.equals(reverse2) ? 0 : -1;
}
}
主功能:
String[] words = new String[]{"One", "Two", "Three", "Four"};
SearchComparator scmp = new SearchComparator();
System.out.println(Arrays.deepToString(words));
System.out.println(Arrays.binarySearch(words, "One", scmp));
System.out.println(Arrays.binarySearch(words, "Two", scmp));
System.out.println(Arrays.binarySearch(words, "Three", scmp));
System.out.println(Arrays.binarySearch(words, "Four", scmp));
輸出:
[One, Two, Three, Four]
-5
1
2
3
什么是-5
? 我不認識男人。
來自Comparator<T>
接口的int compare(T s1, T s2)
返回一個數字,表示s1
是小於,等於還是大於s2
; 你的代碼比較s1
和s2
是否相等,這是不正確的。
您需要更改代碼的return
行以調用String
對象的字典比較方法,如下所示:
return reverse1.compareTo(reverse2);
另一個問題是您的數組沒有按照相同的比較器進行排序。 這就是您在搜索時獲得負索引的原因。 在調用binarySearch
之前添加此行以解決問題:
Arrays.sort(words, scmp);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.