你好:
public static int binarySearch(Object[] a,
Object key)
使用二分搜索法来搜索指定数组,以获得指定对象。在进行此调用之前,必须根据元素的自然顺序对数组进行升序排序(通过 sort(Object[]) 方法)。如果没有对数组进行排序,则结果是不确定的。(如果数组包含不可相互比较的元素(例如,字符串和整数),则无法 根据其元素的自然顺序对数组进行排序,因此结果是不确定的。)如果数组包含多个等于指定对象的元素,则无法保证找到的是哪一个。
参数:
a - 要搜索的数组
key - 要搜索的值
返回:
如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入数组的那一点:即第一个大于此键的元素索引,如果数组中的所有元素都小于指定的键,则为 a.length。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
抛出:
ClassCastException - 如果搜索的键不能与数组的元素进行比较。
这是API,和你解释一下为什么输出-5,如果数组包含不可相互比较的元素(例如,字符串String和整数),则无法 根据其元素的自然顺序对数组进行排序,因此结果是不确定的。就是说对String数组使用这个方法,搜索的条件不在数组内时,结果是不确定的;
binarySearch
public static int binarySearch(long[] a,
long key)
使用二分搜索法来搜索指定的 long 型数组,以获得指定的值。必须在进行此调用之前对数组进行排序(通过 sort(long[]) 方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。
参数:
a - 要搜索的数组
key - 要搜索的值
返回:
如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。 插入点 被定义为将键插入数组的那一点:即第一个大于此键的元素索引,如果数组中的所有元素都小于指定的键,则为 a.length。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
我拷贝了一段API上来认真看你就会明白
应该调用参数是object的我觉得 但是原理是一样的看懂就明白了
Arrays.sort 默认排序是 按照英文从小到大排序.
排完之后colors应该是 blue green orange red yellow
int s2 = Arrays.binarySearch(colors, "orange");
二分查找.. 返回 在colors中 orange的下标
当找不到要搜索的值时,返回 (-(插入点) - 1) ,
插入点可以理解为colors长度..
字母排列,书出 2是你找到的orange排列在第2位 (0开始算)
後面的 -5 是.......我也不知道反正就是超过长度了!!!!