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 找不到目标的主要内容,如果未能解决你的问题,请参考以下文章

Java8 增强工具类 Arrays 笔记

JAVA几个collection框架

Scala替换Arrays.binarySearch?

Arrays.binarySearch的返回值

Arrays.binarySearch()的返回值

Arrays 的二分查找