Sug*_*lai 1 java arrays binary-search
这是我构建的简单代码片段Arrays.binarySearch.但它正在返回一个我甚至没想到的结果.
String[] c = {"A", "Z", "B"};
Arrays.sort(c, new MyNewComparator1()); //Z, B, A
System.out.println(Arrays.binarySearch(c, "Z")); //0
System.out.println(Arrays.binarySearch(c, "S")); //-2 based on insertion point
System.out.println(Arrays.binarySearch(c, "N")); //Unpredicable result we can expect
Run Code Online (Sandbox Code Playgroud)
这是我的自定义比较器
class MyNewComparator1 implements Comparator<String> {
public int compare(String s1, String s2) {
return s2.compareTo(s1);
}
}
Run Code Online (Sandbox Code Playgroud)
我期待的结果 0, -2, Unpredictable
但结果正在回归 -4, -4, -4
有人可以帮我理解为什么它会返回-4所有搜索?
谢谢
正如Javadoc所述,您的数组必须是:
在进行此调用之前,必须根据元素
sort(Object [])的自然顺序(如方法)将数组按升序排序 .
sort(Object [])以上所述的方法阐明:
根据元素的自然顺序,将指定的对象数组按升序排序.
您需要按升序排序,但是您按降序排序.
您需要更改比较器以使其按升序排序:
class MyNewComparator1 implements Comparator<String> {
public int compare(String s1, String s2) {
return s1.compareTo(s2); // <-- swap s1 and s2
}
}
Run Code Online (Sandbox Code Playgroud)
还有另一种解决方案.您可以通过将自己的Comparator传递给方法调用作为最后一个参数来重新定义提升的 含义binarySearch.如果你这样做,那么不要更改比较器 - 保留原来发布的比较器.但是改变binarySearch方法调用:
MyNewComparator1 comparator = new MyNewComparator1();
System.out.println(Arrays.binarySearch(c, "Z", comparator)); // 0
System.out.println(Arrays.binarySearch(c, "S", comparator)); // -2 based on insertion point
System.out.println(Arrays.binarySearch(c, "N", comparator)); // Unpredicable result we can expect
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |