赞
踩
1.Arrays.binarySearch(ints1,0,5,3);
2.Arrays.binarySearch(ints1,3);
解释:ints1 是传入的数组名,支持的类型是
所有的数组类型
不论是对象,引用,字符串,还是 字符,
总而言之,只要是数组,就能传入
第二个数字:代表我们要搜索范围的下限下标 ,该下标包括在内
**第三个数字:**代表我们要搜索范围上限的下标,该下标不包括在内,包括该下标-1的下标,我们称为:上限实际下标
**第四个数字:**我们要搜索的,目标
解释:第二种方式直接全数组搜索,第一个是数组,第二个是目标
1.在范围内搜索到该目标:返回目标的数组下标
2.要搜索的目标比搜索范围的数字都大:返回:(上限实际下标+1)的负值
3.要搜索的目标比搜索范围的数字都小,返回:(下限下标+1)的负值
4要搜索的目标在范围内:返回:最后中间值+1的负值
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; @SuppressWarnings("rawtypes") Comparable midVal = (Comparable)a[mid]; @SuppressWarnings("unchecked") 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. }
对返回值结果源码的分析:
1.小于任何数字:——————返回的return -(low + 1); 其中low一直不变,所以**(下限下标+1)的负值**
2.大于任何数字:——————最以上限下标不变,low比上限大1,再加1就是实际上限+2
然后返回该负值
3.大小在内部:——————但是没有搜索到:这时候,循环条件一定不成立,low>high
之前的low就和high一样的大小,midlowhigh,其中1,2 条件下最终也是,midlowhigh ,只不过有一个上限或者下限不变,以此好表示
在内部的最后还是返回其-(low + 1)
-------只要找到该值,一定返回的是正数,否则一定返回的是负数,
通过和0的比较,来判断是否找到该值
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。