JAVA数组查询的问题

2025-03-07 03:08:26
推荐回答(3个)
回答1:

binarySearchpublic static int
(int[] a,
int fromIndex,
int toIndex,
int key)
使用二分搜索法来搜索指定的 int 型数组的范围,以获得指定的值。必须在进行此调用之前对范围进行排序(通过 sort(int[], int,
int) 方法)。如果没有对范围进行排序,则结果是不确定的。如果范围包含多个带有指定值的元素,则无法保证找到的是哪一个。

参数:a - 要搜索的数组fromIndex - 要搜索的第一个元素的索引(包括)toIndex - 要搜索的最后一个元素的索引(不包括)key - 要搜索的值返回:如果它包含在数组的指定范围内,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入数组的那一点:即范围中第一个大于此键的元素索引,如果范围中的所有元素都小于指定的键,则为
toIndex。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。抛出: IllegalArgumentException - 如果 fromIndex > toIndex ArrayIndexOutOfBoundsException - 如果 fromIndex < 0 或 toIndex > a.length从以下版本开始: 1.6
以上是这个方法的API解释
实际上你数组排序之后是4,10,25.这个方法寻找[0,1)也就是4这个数,它肯定是比你要找的8小的,因此返回的是(-(插入点)-1),此时的插入点是toIndex也就是1,所以结构是-1-1=-2.跟10和25没什么关系

回答2:

首先你应该了解函数binarySearch(),第一个是你要找的数组,第二个找的起始位置,第三个是结束位置。第四个是找的值。你已经对那个数组进行排序了:4,8,25.
如果找到,返回索引值;否则返回的是负数,(-(插入点) - 1),在这里的插入点是10,也就是第一个大于8的值,所以是-1-1=-2了。懂了么?

回答3:

sort排序数组的时候是排序第一个数字,也就是8比25还大,因为25第一个数字是2。