簡體   English   中英

Arrays.binarySearch() 返回錯誤的插入點

[英]Arrays.binarySearch() returns wrong insertion point

這是代碼:

public class Main {

    public static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) throws IOException {

        int arr[] = {10,50,999,1000};
        int index = Arrays.binarySearch(arr,55);
        System.out.println(index);
    }
}

這里的 output 是 '-3',如果 output 來自這個公式“(-(插入點) - 1)”,則意味着插入點是 '4',這是不對的。

那么我錯過了什么?

插入點是2 ,而不是4

根據官方文檔

插入點定義為將鍵插入數組的點:第一個元素索引大於鍵 [...]

您的索引數組是

[10, 50, 999, 1000]
  0   1    2     3

大於55的第一個元素是索引2處的999 請記住,索引從0開始計數。

所以插入點是2 因此,使用公式(-(insertion point) - 1) ,返回值必須是:

(-(2) - 1) = -3

這正是你得到的。

沒有遺漏。 Array.binarySearchs返回搜索鍵的索引,如果它包含在數組中; 否則,(-(插入點)- 1)。 插入點定義為將鍵插入數組的點:第一個元素的索引大於鍵,或者如果數組中的所有元素都小於指定的鍵,則為 a.length。 請注意,這保證了當且僅當找到鍵時,返回值將 >= 0。 這個描述來自這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM