即使数组已排序,Java Arrays.binary搜索也会返回错误的数据

时间:2013-10-13 06:24:25

标签: java

文档写道:“如果数组中的所有元素都小于指定的键,则Arrays.binarySearch返回a.length”。所以在下面的程序中,我期望打印值4,但它打印-4。为什么会出现这种异常行为?

import java.io.*;
import java.math.*;
import java.util.*;
import java.lang.*;

public class Main{ 
    public static void main(String[] args)throws java.lang.Exception{
        int[] a = new int[3];
        a[0] = 3;
        a[1] = 8;
        a[2] = 9;
        System.out.println(Arrays.binarySearch(a, 15));         
    }
}

2 个答案:

答案 0 :(得分:8)

引自Java Docs ..

  

返回:搜索键的索引(如果它包含在数组中);除此以外,   ( - (插入点) - 1)。

插入点是

  

定义为将密钥插入的位置   array:第一个元素的索引大于键,或者   a.length如果数组中的所有元素都小于指定的键

在您的示例中,所有元素都小于15,数组的长度为3。因此插入点为3,因此binarySearch返回-3-1 = -4

答案 1 :(得分:0)

如果它返回负值,则找不到:

http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html

public static int binarySearch(Object [] a,                                对象键)

返回:搜索键的索引(如果它包含在数组中);否则,( - (插入点) - 1)。插入点定义为键将插入到数组中的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定键,则为a.length。请注意,当且仅当找到密钥时,这可以保证返回值>> =。