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