Java SE 7 Arrays.binarySearch()

时间:2014-02-01 02:23:12

标签: java arrays binary-search

程序运行时可以打印的所有可能值是什么?

import java.util.*;
public class TestClass {         

    static String[] sa = { "a", "aa", "aaa", "aaaa" };     
    static     {         Arrays.sort(sa);     }     

    public static void main(String[] args)     {     
        String search = "";     
        if(args.length != 0) search = args[0];
        System.out.println(Arrays.binarySearch(sa, search));    
    } 
}  

正确答案是从-5到3的任意数字。

我仍然不明白正确的答案。

有三种可能性。

1)如果数组中的所有元素都小于搜索键,则插入点为4,因此返回-5。

2)如果数组中的所有元素都大于搜索键,则插入点为0,因此返回-1。

3)如果数组中的任何元素与搜索键匹配,则返回的值应介于-5和-1之间。

那么如何返回从0到3的值?

2 个答案:

答案 0 :(得分:2)

那么如何返回从0到3的值?

如果search = "aaaa"输出为3,那么这就是方法binarySearch返回的位置(索引)。如果出现类似情况:

search = "aaa",输出为2

search = "aa",输出为1

search = "a",输出为0

要理解这一点,请尝试打印数组sa

的元素
System.out.println(sa[0]); // index 0
System.out.println(sa[1]); // index 1
System.out.println(sa[2]); // index 2
System.out.println(sa[3]); // index 3

<强>输出:

a
aa
aaa
aaaa

答案 1 :(得分:0)

来自javadoc

  

返回搜索键的索引(如果它包含在数组中);除此以外,   ( - (插入点) - 1)。插入点定义为点   密钥将插入到数组中:索引   第一个元素大于键,或者a.length如果所有元素都在   array小于指定的键。

您有一个大小为4的数组。因此该元素可以位于索引0,1,2或3中。

其他可能性是你的第1点和第2点。