String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};
// Search for the word "cat"
int index = Arrays.binarySearch(sortedArray, "Quality");
我总是得到-3
。问题出在"Name"
。为什么我的数组中不能有"Name"
?有什么想法吗?
答案 0 :(得分:25)
要使用binarySearch
,您需要先自己对数组进行排序:
String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};
java.util.Arrays.sort(sortedArray);
int index = Arrays.binarySearch(sortedArray, "Quality");
答案 1 :(得分:6)
必须对数组进行排序。来自binarySearch()的Javadoc:
在进行此调用之前,必须根据元素的自然顺序将范围按升序排序。如果未排序,则结果未定义。
答案 2 :(得分:2)
必须对数组进行排序才能使二进制搜索生效。 binarySearch的javadoc说:
在进行此调用之前,必须根据元素的自然顺序(通过sort(Object [])方法)将数组按升序排序。 如果未排序,则结果未定义。
(强调补充。)
原因很简单。二进制搜索算法具有输入数组已排序的前提条件。