Javaの配列クエリArraysクラスのbinarySearch()メソッドの詳細


一、binarySearch(Object[],Object key)
a:検索する配列
key:検索する値
keyが配列にある場合、検索値のインデックスが返されます.そうでない場合は、-1または-(挿入点)を返します.挿入点は、インデックスキーが配列に挿入される点、すなわち、キーより大きい最初の要素のインデックスです.
テクニック:
[1]検索値は配列要素ではなく、配列範囲内で、下付き文字は1からカウントされ、「-挿入点インデックス値(下付き文字)」を得る.
[2]検索値は配列要素であり、下付き文字は0からカウントされ、検索値のインデックス値(下付き文字)を得る.
[3]検索値は配列要素ではなく、配列内の要素より大きく、インデックス値(下付き)は-(length+1)である.
[4]検索値は配列要素ではなく、配列内の要素より小さく、インデックス値(下付き)は–1である.
  :

       int arr [] =newint[]{1,3,4,5,8,9};

        Arrays.sort(arr);

       int index1 = Arrays.binarySearch(arr,6);

       int index2 = Arrays.binarySearch(arr,4);

       int index3 = Arrays.binarySearch(arr,0);

       int index4 = Arrays.binarySearch(arr,10);

        System.out.println("index1 = "+ index1 +", index2 = " + index2 +

                        ", index3 = " + index3 +", index4 = "+ index4);

  :index1= -5, index2 = 2, index3 = -1, index4 = -7

二、binarySearch(Object[],int fromIndex,int toIndex,Object key)
a:検索する配列
fromIndex:指定範囲の先頭インデックス(含む)、すなわち下付き1
toIndex:指定した範囲の末尾にインデックス(含まない)、すなわち下付き2
key:検索する値
検索する要素keyが指定した範囲内にある場合、検索値のインデックスが返されます.そうでない場合は、-1または-(挿入点)を返します.
テクニック:
[1]この検索キーは範囲内にあるが、配列要素ではなく、下付き文字は1からカウントされ、「-挿入点インデックス値(下付き文字)」を得る.
[2]この検索キーは範囲内であり、配列要素であり、下付き文字は0からカウントされ、検索値のインデックス値(下付き文字)を得る.
[3]この検索キーは範囲内ではなく、範囲(配列)内の要素より小さく、–(fromIndex+1)を返す.
[4]検索キーは範囲内ではなく、範囲(配列)内の要素より大きく、–(toIndex+1)を返します.
  :

        int arr [] =newint[]{1,3,4,5,8,9};

        System.out.println(arr.length+1);

        Arrays.sort(arr);

       int index5 = Arrays.binarySearch(arr,1, 4, 6);

       int index6 = Arrays.binarySearch(arr,1, 4, 4);

       int index7 = Arrays.binarySearch(arr,1, 4 ,2);

       int index8 = Arrays.binarySearch(arr,1, 3, 10);

       int index9 = Arrays.binarySearch(arr,1, 3, 0);

        System.out.println("index5 = "+ index5 +", index6 = " + index6 +

                        ", index7 = " + index7 +", index8 = "+ index8 +

                     ", index9 = " + index9);

  :index5 = -5, index6 = 2,index7 = -2, index8 = -4, index9 = -2