我正在尝试制作一个自定义比较器对象,以便与java.util.Arrays.binarySearch
一起使用。
我希望在数组中搜索其反向值等于目标字符串元素的反向值的字符串(我知道,这只是为了学习)。
但是,当我尝试在数组上运行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
怎么了?我不认识男人。
发布于 2014-03-02 04:03:20
来自Comparator<T>
接口的Comparator<T>
返回一个数字,该数字指示s1
是小于、等于还是大于s2
;代码比较s1
和s2
是否相等,这是不正确的。
您需要更改代码的return
行,以调用String
对象的字典比较方法,如下所示:
return reverse1.compareTo(reverse2);
另一个问题是您的数组没有按照相同的比较器进行排序。这就是为什么在搜索时会得到负索引的原因。在调用binarySearch
以修复问题之前添加这一行:
Arrays.sort(words, scmp);
https://stackoverflow.com/questions/22127259
复制相似问题