java中Arrays类中,binarySearch()方法的返回值问题
最近在复习Java知识,发现果然不经常使用忘得非常快。。。
看到binarySearch()方法的使用时,发现书上有点错误,于是就自己上机实验了一下,最后总结一下该方法的返回值。
总结:binarySearch()方法的返回值为:1、如果找到关键字,则返回值为关键字在数组中的位置索引,且索引从0开始2、如果没有找到关键字,返回值为负的插入点值,所谓插入点值就是第一个比关键字大的元素在数组中的位置索引,而且这个位置索引从1开始。
注意:调用binarySearch()方法前要先调用sort方法对数组进行排序,否则得出的返回值不定,这时二分搜索算法决定的。
下面看一个程序实例
package main_package;
import java.util.Arrays;
public class test {
public static void main(String[] args)
{
int[]b=new int[]{4,25,10,95,06,21};
System.out.println("原数组为:");
for(int dim1:b)
{
System.out.print(""+dim1+" ");
}
Arrays.sort(b);
System.out.println("排序后为:");
for(int x:b)
{
System.out.print(x+" ");
}
System.out.println();
int index=Arrays.binarySearch(b, 2);
System.out.println("关键字2的返回值为:"+index);
index=Arrays.binarySearch(b, 20);
System.out.println("关键字20的返回值为:"+index);
index=Arrays.binarySearch(b, 30);
System.out.println("关键字30的返回值为:"+index);
index=Arrays.binarySearch(b, 100);
System.out.println("关键字100的返回值为:"+index);
index=Arrays.binarySearch(b, 10);
System.out.println("关键字10的返回值为:"+index);
}
}
程序结果为:

可以看到 关键字2并没有在数组中,而且2比数组中的任何一个元素都小,所以其插入点的值应为元素4的位置也就是1(没有找到关键字从1开始)
关键字20也不在数组中,数组中第一个比20大的数是21,所以20的插入点值为4(没用找到关键字从索引从1开始)
关键字100也不在数组中,而且100比数组中所有的元素都大,此时插入点值为length+1 为7(没有找到关键字索引从1开始)
关键字10在数组中,所以返回其在数组中的索引为2(找到关键字索引从0开始)
之所以计算插入点值时索引要从1开始算,是因为-0=0,如果从0开始算,那么上面例子中关键字2和关键字4的返回值就一样了。
java中Arrays类中,binarySearch()方法的返回值问题的更多相关文章
- list中包含多个相同值时,List中的indexOf(Object o)方法的返回值
查一下Java API,List下的indexOf(Object o)方法的返回值为list列表中首个元素出现位置的索引,找不到时返回-1
- 关于ajax中return并不能作为方法的返回值
接下来关于ajax中的return值最后没有办法是方法的最终返回值问题 login(username,password) { console.log("进入方法"); $.ajax ...
- Java中数组操作 java.util.Arrays 类常用方法的使用
任何一门编程语言,数组都是最重要和常用的数据结构之一,但不同的语言对数组的构造与处理是不尽相同的. Java中提供了java.util.Arrays 类能方便地操作数组,并且它提供的所有方法都是静态的 ...
- Arrays 类的 binarySearch() 数组查询方法详解
Arrays类的binarySearch()方法,可以使用二分搜索法来搜索指定的数组,以获得指定对象.该方法返回要搜索元素的索引值.binarySearch()方法提供多种重载形式,用于满足各种类型数 ...
- java.util.Arrays类详解(源码总结)
概述 Arrays类位于java.util包下,是一个对数组操作的工具类.今天详细的看了看Arrays类的4千多行源码,现将Arrays类中的方法做一个总结(JDK版本:1.6.0_34).Array ...
- java中Arrays类的应用
java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的.具有以下功能: ² 给数组赋值:通过fill方法. ² 对数组排序:通过sort方法,按升序. ² 比较数组:通过equ ...
- Java中主类中定义方法加static和不加static的区别
Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用(类名.方法),后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 ...
- java.util.Stack类中的peek()方法
java.util.stack类中常用的几个方法:isEmpty(),add(),remove(),contains()等各种方法都不难,但需要注意的是peek()这个方法. peek()查看栈顶的对 ...
- Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能
Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能. 下面是个例子: import org.junit.Test; import java. ...
随机推荐
- Android 高仿UC浏览器监控剪切板弹出悬浮窗功能
UC浏览器应该是android手机里 最流行的浏览器之一了,他们有一个功能 相信大家都体验过,就是如果你复制了什么文字,(在其他app中 复制也有这个效果!,所以能猜到肯定是监控了剪切板),就会弹出一 ...
- linux下mysql操作的命令
最近在学习mysql,还是只菜鸟,找到下面篇文章对初学者挺有用的,所以共享下 1.linux下启动mysql的命令: mysqladmin start /ect/init.d/mysql star ...
- Linux下常用软件
一, vmtool安装, 进入桌面就后,如果没有看到VMware Tools光盘, 请点击VMware Station菜单栏上的“虚拟机”,然后选择“安装VMware Tools”,就可以在桌面上以看 ...
- linux静态与动态库创建及使用实例
一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...
- HDU 4540 威威猫系列故事——打地鼠
威威猫系列故事--打地鼠 Time Limit: 300/100 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Su ...
- hdu 3537(博弈,翻硬币)
题意:给定了每个正面朝上的硬币的位置,然后每次可以翻1,2,3枚硬币,并且最右边的硬币开始必须是正面朝上的. 分析: 约束条件6:每次可以翻动一个.二个或三个硬币.(Mock Turtles游戏) 初 ...
- USB鼠标过一段时间后失灵问题的修复
现象: USB鼠标计算机锁屏一段时间后,不能动了,拔下来重新插上后,又恢复正常了. 原因: 这是系统默认USB电源管理造成的.一段时间不用后,自动关闭了USB电源. 解决方法: 1.进入设备管理器 在 ...
- C++标准转换运算符 --四种
具体归纳如下: reinterpret_cast 函数将一个类型的指针转换为另一个类型的指针. 这种转换不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可做到.rein ...
- Linux下U盘的挂载和文件的拷贝
把文件通过U盘拷贝到linux系统下插好U盘后,查看磁盘情况fdisk -l正常情况下有 Disk /dev/sda:2045 MB,2045247488 bytes47 heads,46 secto ...
- hadoop2.6.0 --- 64位源代码
今天有朋友在群里找hadoop最新的2.6.0的源代码,其实这个源代码在hadoop的官方网站是有下载的(应该是32位的),还有一个src,不过给的是maven版本,需要自己在机器上编译一下(我的机器 ...