[英]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.