java Arrays.binarySearch 找不到目标
Posted
技术标签:
【中文标题】java Arrays.binarySearch 找不到目标【英文标题】:java Arrays.binarySearch fails to find target 【发布时间】:2011-04-10 02:31:30 【问题描述】:String[] sortedArray = new String[]"Quality", "Name", "Testing", "Package";
// Search for the word "cat"
int index = Arrays.binarySearch(sortedArray, "Quality");
我总是收到-3
。问题出在"Name"
。为什么我的数组中不能有"Name"
?有什么想法吗?
【问题讨论】:
“名称”应在“质量”之前,“包装”应在“测试”之前。 binarySearch 仅适用于排序数组。 @Jon,我认为您的意思是“包装”应该出现在“质量”之前。 【参考方案1】:为了使用binarySearch
,您需要先自己对数组进行排序:
String[] sortedArray = new String[]"Quality", "Name", "Testing", "Package";
java.util.Arrays.sort(sortedArray);
int index = Arrays.binarySearch(sortedArray, "Quality");
【讨论】:
【参考方案2】:数组必须排序。来自 binarySearch() 的 Javadoc:
在进行此调用之前,必须根据其元素的自然顺序对范围进行升序排序。如果未排序,则结果未定义。
【讨论】:
【参考方案3】:必须对数组进行排序才能使二进制搜索起作用。 binarySearch 的 javadoc 是这样说的:
在进行此调用之前,必须根据其元素的自然顺序(如 sort(Object[]) 方法)对数组进行升序排序。 如果未排序,则结果未定义。
(已添加重点。)
原因很简单。二分查找算法的前提是输入数组是有序的。
【讨论】:
以上是关于java Arrays.binarySearch 找不到目标的主要内容,如果未能解决你的问题,请参考以下文章