簡體   English   中英

為什么在使用Collections.binarySearch()時得到錯誤的答案

[英]why getting wrong answer when using Collections.binarySearch()

public class BinarySearchCollections {
  public static void search(List<String> list) {
    list.clear();
    list.add("b");
    list.add("a");
    list.add("c");
    System.out.println(Collections.binarySearch(list, "b"));
    System.out.println(list);
  }
  public static void main(String[] args) {
    List<String> lis = new ArrayList<String>();
    BinarySearchCollections bs = new BinarySearchCollections();
    bs.search(lis);
  }
}

在這里我得到ans為-3(因為它告訴我它將被添加到什么位置)但我已經在我的列表中有b了。

您的原始列表未排序,因此二進制搜索將為您提供無意義的答案。

想象一下它實際采取的步驟:

“是嗎?是的,所以看起來更高。”

“b> c?不,但我們不能降低,所以在索引2處插入(也就是返回-3。)”

如果你想讓二進制搜索工作,給它一個列表,它可以采取有意義的步驟,然后給你正確的答案。

Collections.binarySearch()無法確保在嘗試搜索之前對列表進行排序。 在調用binarySearch()之前,您需要確保是這種情況。

如果它首先檢查列表,它會將O(lg(n))搜索轉換為O(n + lg(n))檢查/搜索,從而降低性能。 (O(nlg(n))如果必須對列表進行排序)。

您應該檢查List.Sort()方法。

暫無
暫無

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

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