zoukankan      html  css  js  c++  java
  • Java binarysearch方法

    今天在用明日科技的《Java从入门到精通》一书学习Java,看到数组查询这里有一点无法理解,上机实验感觉和书上讲的不太一样,遂百度之,感觉是书上讲的有误,现记录一下。


    首先 数组排序需要import java.util.Arrays类

    binarysearch有两个用法,一个是在整个数组里搜索,一个是在指定范围搜索,其实都是差不多的,可以将前者视为后者的特殊情况。

    用法1

    binarySearch(Object[], Object key)

    Object是目标数组,key是目标值,要求目标数组必须要经过排序的,否则无法找到正确的结果

    查询无非就是两种结果,一种是目标值在目标数组里,另一种是不在

    所以返回值也分为正负两种,目标值在目标数组内的,返回下标(如果有多个相同的,无法确定找到的是哪个,因为是二分搜索)

    目标值不在数组内的,返回 -(第一个大于目标值的元素的下标+1),类似的,如果数组内的值都比目标值小,则是返回-(数组长度+1)

    样例:

    import java.util.Arrays;
    public class number {
        public static void main(String[] args) {
        int a[] = new int[] {1, 3, 4, 6, 8, 9};  
        int x1 = Arrays.binarySearch(a, 5);  
        int x2 = Arrays.binarySearch(a, 4);  
        int x3 = Arrays.binarySearch(a, 0);  
        int x4 = Arrays.binarySearch(a, 10);
        System.out.println(x1+" "+x2+" "+x3+" "+x4);
        }            
    }

    输出:

    -4 2 -1 -7

    也可以这么理解:

    对应相应的位置输出即可。

    用法2

    binarySearch(Object[], int fromIndex, int toIndex, Object key)

    加了两个int变量,代表区间的开始和结束,从fromindex(包含)到toindex(不包含)这个区间里面搜索,返回值和前面用法1类似,唯一有所不同的是,当如果区内的值都比目标值小,则是返回-(toindex+1),如果区间内的值都比目标值大,则返回-(fromindex+1),仔细想想不难理解,用法1就相当于fromindex为0且toindex为数组长度的用法2。

  • 相关阅读:
    二进制&bitset(未完成)
    Python接口测试课程(第四天)-接口测试框架实现
    Python接口测试课程(第三天)-接口安全验证,参数化及断言
    Python接口测试课程(第二天)-接口测试快速实践
    {title}
    Python自动化测试面试题-接口篇
    Python自动化测试面试题-Selenium篇
    unittest使用signal信号量
    Selenium使用ChromeOptions启动参数
    Selenium执行Javascript脚本使用参数和返回值
  • 原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/12234145.html
Copyright © 2011-2022 走看看