java Arrays.binarySearch无法找到目标

时间:2010-09-09 06:06:47

标签: java binary-search

String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};   

// Search for the word "cat" 
int index = Arrays.binarySearch(sortedArray, "Quality");  

我总是得到-3。问题出在"Name"。为什么我的数组中不能有"Name"?有什么想法吗?

3 个答案:

答案 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 [])方法)将数组按升序排序。 如果未排序,则结果未定义。

(强调补充。)

原因很简单。二进制搜索算法具有输入数组已排序的前提条件。