JavaでのArrays.binarySearch()メソッドの詳細

2430 ワード

1.作用
指定した要素を二分法で並べ替えた配列で検索し、その要素の下付き文字を返します.
2.操作インタフェース
メソッドのプロトタイプは、配列名と検索する必要がある要素の2つのパラメータを受信するpublic static int binarySearch(Object[] a, Object key)です.
3.戻り値
メソッドの戻り値のタイプは整数で、具体的な戻り値は次の2つに分けられます.
  • 配列に要素が存在する場合、その要素の配列内の下付き文字が返されます.
  • 例えば
    import java.util.Arrays;
    public class binarySearch {
        public static void main(String[] args) {
            int[] scores = {1, 20, 30, 40, 50};
            //   scores     20
            int res = Arrays.binarySearch(scores, 20);
            //      
            System.out.println("res = " + res);
        }
    }
    
    
    実行結果:res=2
  • 配列に要素が存在しない場合は、-(挿入点+1)が返されます.
  • ここでの挿入点とは、具体的には、配列にその要素が存在する場合、その要素は配列の下付き
  • を指す.
  • 例えば
    import java.util.Arrays;
    public class binarySearch {
        public static void main(String[] args) {
            int[] scores = {1, 20, 30, 40, 50};
            //1.   scores     25
            //         25  20 30  ,
            //  20    1,  25    2,
            //        :-(2 + 1) = -3
            int res1 = Arrays.binarySearch(scores, 25);
            //2.         -2
            //    -2              
            //            ,  -2       0
            //        :-(0 + 1) = -1
            int res2 = Arrays.binarySearch(scores, -2);
            //3.          55
            //  55              
            //              ,      5
            //        :-(5 + 1) = -6
            int res3 = Arrays.binarySearch(scores, 55);
            //      
            System.out.println("res1 = " + res1);
            System.out.println("res1 = " + res2);
            System.out.println("res1 = " + res3);
        }
    }
    
    実行結果:res 1=-3 res 1=-1 res 1=-6
  • 4.具体的な実現原理
    import java.util.Arrays;
    public class binarySearch {
        public static void main(String[] args) {
            int[] scores = {1, 20, 30, 40, 50};
            //  java   binarySearch  
            int a = Arrays.binarySearch(scores, 30);
            //      binarySearch  
            int b = myBinarySearch(scores, 30);
            System.out.println("a = " + a);
            System.out.println("b = " + b);
        }
        //         
        public static int myBinarySearch(int [] array, int key) {
    		int low = 0;
    		int high = array.length - 1;
    		int mid = (low + high) / 2;
    		while(low <= high) {
    			if(key < array[mid]) 
    				high = mid - 1;
    			else if(key > array[mid]) 
    				low = mid + 1;
    			else 
    				return mid;
    		}
    		return -(1 + low);
    	}
    }
    
    
    実行結果:a=2 b=2