String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};
// Search for the word "cat"
int index = Arrays.binarySearch(sortedArray, "Quality");
我总是得到-3
。问题在"Name"
. "Name"
为什么我的数组中不能有?任何的想法?
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[]) 方法)对数组进行升序排序。如果未排序,则结果未定义。
(强调补充。)
原因很简单。二分查找算法的前提条件是输入数组是有序的。