本篇文章给大家谈谈binarysearch数组java,以及ArraysbinarySearch对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、在Java中用binarySearch方法如何一次获得一维数组中所有元素的下标,并输出2、java Arrays.binarySearch ?3、JAVA中Arrays.binarySearch()的问题4、binarysearch函数查找对象数组 java5、为什么在Java中使用binarySearch方法时,该方法内的数组形参需要是有序的
在Java中用binarySearch方法如何一次获得一维数组中所有元素的下标,并输出
您好,提问者:
1、如果非要用二分法输出所有数组下标的话,很遗憾,实现不了,除非自己覆盖方法。
2、二分法先排序,可以直接使用Arrays.sort(arr);。
3、调用Arrays.binarySearch(arr,6);//比如要查找6的下标。
4、这时候要得到数组的下标可以遍历数组的,二分法只是查找指定下标。
java Arrays.binarySearch ?
public static int binarySearch(int[] a,
int fromIndex,
int toIndex,
int key)
使用二分搜索法来搜索指定的 int 型数组的范围,以获得指定的值。必须在进行此调用之前对范围进行排序(通过 sort(int[], int,
int) 方法)。如果没有对范围进行排序,则结果是不确定的。如果范围包含多个带有指定值的元素,则无法保证找到的是哪一个。
参数:
a – 要搜索的数组
fromIndex – 要搜索的第一个元素的索引(包括)
toIndex – 要搜索的最后一个元素的索引(不包括)
key – 要搜索的值
返回:
如果它包含在数组的指定范围内,则返回搜索键的索引;否则返回 (-(插入点) – 1)。插入点
被定义为将键插入数组的那一点:即范围中第一个大于此键的元素索引,如果范围中的所有元素都小于指定的键,则为
toIndex。注意,这保证了当且仅当此键被找到时,返回的值将 = 0。
所以 -(2)-1 =-3
JAVA中Arrays.binarySearch()的问题
这个方法没有string[]作为参数的,所以当你用string作为参数的话实质上用的是这个
如果再不懂可以看看api
binarysearch函数查找对象数组 java
//这个方法改一下就可以了
public int compareTo(A arg0) {
if (a arg0.a)
return 1;
else if (a == arg0.a) {
return 0;
} else {
return -1;
}
}
//下面是binarySearch源码,可以发现比较调用的是compareTo方法而不是equals方法
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.
}
为什么在Java中使用binarySearch方法时,该方法内的数组形参需要是有序的
binarySearch方法是根据二分法查找指定的元素,反而该指定元素的下标索引
这里就不得不提一下二分法的执行步骤:
先找到中间位置的元素
如果需要查找的元素比中间位置的元素小,就抛弃右边一半的元素,往左边找,然后重复第一步
如果需要查找的元素比中间位置的元素大,就抛弃左边一半的元素,往左边找,然后重复第一步
现在是否明白为什么binarySearch方法的形参必须是有序的了呢?
因为如果不是有序的 那么该方法查找的结果根本是没有意义的
此外,该方法还有两个小细节:
传进去当做参数的数组必须是升序排列
如果该数组中有3个元素是相同的 而你要查找的正好是该元素,那么该方法的返回值是该3个元素的下标索引中的任意一个,这也算是该方法的一个bug
binarysearch数组java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于ArraysbinarySearch、binarysearch数组java的信息别忘了在本站进行查找喔。