今天在用明日科技的《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。