Fork me on GitHub

Arrays类中binarySearch()的问题

最近新上手了Java,学习的过程中发现在binarySearch()方法中有点地方不明,so~google了一下。

binarySearch()方法的返回值有两种情况:1、如果找到关键字,则返回值为关键字在数组中的位置索引,且索引从0开始; 2、如果没有找到关键字,返回值为负的插入点值,插入点值就是第一个比关键字大的元素在数组中的位置索引,而且这个位置索引从1开始

注:调用binarySearch()方法前要先调用sort方法对数组进行排序,否则得出的返回值不定,这是二分搜索算法决定的。

如下一个小例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.Arrays;
public class Example2_7 {
public static void main(String[] args) {
int[] a= new int[] {12, 34, 9, 23, 45, 6, 45, 90, 123, 19, 34};
int[] b= {12, 34, 9, 23, 45, 6, 45, 90, 123, 19, 34};
//两种定义方法都可
Arrays.sort(b);
System.out.println(Arrays.toString(b));
Arrays.sort(a);
System.out.println(Arrays.toString(a));
int number= 45;
int index= Arrays.binarySearch(a, number);
System.out.println(index);
if( index>= 0){
System.out.println(number+ "和数组中索引为"+ index+ "的元素值相同");
}
else {
System.out.println(number+ "不与数组中的任何元素值相同");
}
int numberd= 89;
//此时没有找到关键字,返回值为-10,第一个比89大的数是90,位置是第十个,此时位置索引从1开始
int indexd= Arrays.binarySearch(a, numberd);
System.out.println(indexd);
if( indexd>= 0){
System.out.println(numberd+ "和数组中索引为"+ indexd+ "的元素值相同");
}
else {
System.out.println(numberd+ "不与数组中的任何元素值相同");
}
}
}

运行结果为

1
2
3
4
5
6
[6, 9, 12, 19, 23, 34, 34, 45, 45, 90, 123]
[6, 9, 12, 19, 23, 34, 34, 45, 45, 90, 123]
8
45和数组中索引为8的元素值相同
-10
89不与数组中的任何元素值相同

Your support will encourage me to continue to create!