用Java实现的Java中的Arrays.binarySearch()(在子数组中搜索)

作者: Arvin Chen 分类: Java 来源: Break易站(www.breakyizhan.com)
  •   Java 数组

    用Java实现的Java中的Arrays.binarySearch()(在子数组中搜索)

    该组将包含“如何在给定范围内搜索数组中的键,包括仅包含起始索引”。

    句法 :

    public static int binarySearch(data_type [] arr,int fromIndex,int toIndex,data_type key)
     参数:
    arr - 要搜索的数组fromIndex - 要搜索的第一个元素的索引(包含)
     toIndex - 最后一个元素的索引(独占)被搜索键 - 要搜索的值
    • 它是java 中Arrays(java.util.Arrays)类中定义的静态内置方法,如果在指定范围内找到,则返回指定键的索引。
    • 这里,data_type可以是任何基本的data_type:byte,char,double,int,float,short,long和Object。
    • 上述函数使用二分搜索算法搜索给定数据类型的指定数组的范围。
    • 在进行此调用之前,必须对指定要搜索的键进行排序的范围(如Arrays.sort()方法)。否则结果将是未定义的。如果指定数组包含与指定键相同的多个值,则不能保证会找到哪一个。

    返回:
    如果在指定数组的指定范围内找到指定键的索引,否则( - (插入点) - 1)。
    插入点定义为插入指定键的点:大于键的范围中第一个元素的索引;如果范围内的所有元素小于指定键,则为toIndex。
    注意:当且仅当找到该键时,这保证了返回值> = 0。

    例子:

       byteArr [] = {10,20,15,22,35}
       key = 22在指定数组的范围2到4之间搜索。
       输出:3
    
       charArr [] = {'g','p','q','c','i'}
       key = p在指定数组的范围1到4之间搜索。
       输出:3
    
       intArr [] = {1,2,3,4,5,6}
       key = 3在指定数组的范围1到4之间搜索。
       输出:2
    
       doubleArr [] = {10.2,15.1,2.2,3.5}
       key = 1.5在指定数组的范围1到4之间搜索。
       输出:-2,因为它是插入点1.5
    
       floatArr [] = {10.2f,15.1f,2.2f,3.5f}
       key = 35.0在指定数组的范围1到4之间搜索。
       输出:-5
    
      shortArr [] = {10,20,15,22,35}
      key = 5在指定数组的范围0到4之间搜索。
      输出:-1
    

    实现:

    // Java program to demonstrate working of  binarySearch() method
    // for specified range in a sorted array.
    import java.util.Arrays;
     
    public class GFG
    {
        public static void main(String[] args)
        {
            byte byteArr[] = {10,20,15,22,35};
            char charArr[] = {'g','p','q','c','i'};
            int intArr[] = {1,2,3,4,5,6};
            double doubleArr[] = {10.2,15.1,2.2,3.5};
            float floatArr[] = {10.2f,15.1f,2.2f,3.5f};
            short shortArr[] = {10,20,15,22,35};
     
            Arrays.sort(byteArr);
            Arrays.sort(charArr);
            Arrays.sort(intArr);
            Arrays.sort(doubleArr);
            Arrays.sort(floatArr);
            Arrays.sort(shortArr);
     
            byte byteKey = 22;
            char charKey = 'p';
            int intKey = 3;
            double doubleKey = 1.5;
            float floatKey = 35;
            short shortKey = 5;
     
            System.out.println(byteKey + " found at index = "
                            +Arrays.binarySearch(byteArr,2,4,byteKey));
            System.out.println(charKey + " found at index = "
                            +Arrays.binarySearch(charArr,1,4,charKey));
            System.out.println(intKey + " found at index = "
                            +Arrays.binarySearch(intArr,1,4,intKey));
            System.out.println(doubleKey + " found at index = "
                            +Arrays.binarySearch(doubleArr,1,4,doubleKey));
            System.out.println(floatKey + " found at index = "
                            +Arrays.binarySearch(floatArr,1,4,floatKey));
            System.out.println(shortKey + " found at index = "
                            +Arrays.binarySearch(shortArr,0,4,shortKey));
        }
    }
    

    输出:

    22 found at index = 3
    p found at index = 3
    3 found at index = 2
    1.5 found at index = -2
    35.0 found at index = -5
    5 found at index = -1

    例外情况:

    1. IllegalArgumentException:在启动索引(fromIndex)时抛出的值大于指定范围的结束索引(toIndex)(表示:fromIndex> toIndex)
    2. ArrayIndexOutOfBoundsException:如果一个或两个索引都无效,则表示fromIndex <0或toIndex> arr.length。

    重点:

    • 如果输入列表未排序,则结果未定义。
    • 如果有重复,则不能保证会找到哪一个。
  •   Java 数组
  •   本文标题:用Java实现的Java中的Arrays.binarySearch()(在子数组中搜索) - Break易站
    转载请保留页面地址:https://www.breakyizhan.com/java/4074.html
      微信返利机器人
      免费:淘宝,京东,拼多多优惠券
      腾讯,爱奇艺,优酷的VIP视频免费解析,免费看
      即刻扫描二维码,添加微信机器人!

    发表笔记

    电子邮件地址不会被公开。 必填项已用*标注