本人小菜鸟。。SCJP考题。
public static class Quest{
public static void main(String[] args){
String[] colors =
{"blue","red","green","yellow","orange"};
Arrays.sort(colors);
int s2 = Arrays.binarySearch(colors, "orange");
int s3 = Arrays.binarySearch(colors, "violet");
System.out.print(s2 + "" + s3);
}
}
}
为啥s3是-5求高手解释下2分法检索
[code="java"]private static int binarySearch0(Object[] a, int fromIndex, int toIndex,
Object key) {
int low = fromIndex;
int high = toIndex - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
Comparable midVal = (Comparable)a[mid];
int cmp = midVal.compareTo(key);
if (cmp < 0)
low = mid + 1;
else if (cmp > 0)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
[/code]
人家是这样实现的,最后当然是-5啦
public static int binarySearch(Object[] a,
Object key)
使用二进制搜索算法来搜索指定数组,以获得指定对象。在进行此调用之前,必须根据数组元素的自然顺序 对数组进行升序排序(通过上面的 Sort(Object[] 方法)。如果没有对数组进行排序,则结果是不明确的。(如果数组包含不可相互比较的元素(例如,字符串和整数),则无法 根据数组元素的自然顺序对数组进行排序,因此结果是不明确的。)如果数组包含多个等于指定对象的元素,则无法保证找到的是哪一个。
参数:
a - 要搜索的数组。
key - 要搜索的值。
返回:
搜索键的索引,如果它包含在列表中;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引,如果列表中的所有元素都小于指定的键,则为 list.size()。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。