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。
答案 0 :(得分:1)
您的原始列表未排序,因此二进制搜索会给您一个无意义的答案。
想象一下它实际采取的步骤:
“是b&gt; a?是的,所以看起来更高。”
“是b&gt; c?不,但我们不能降低,所以在索引2处插入(也就是返回-3。)”
如果你想让二进制搜索工作,给它一个可以采取有意义步骤的列表,然后给你正确答案。
答案 1 :(得分:1)
Collections.binarySearch()
无法确保在尝试搜索之前对列表进行排序。在调用binarySearch()
之前,您需要确保是这种情况。
如果它首先检查列表,它会将O(lg(n))搜索转换为O(n + lg(n))检查/搜索,从而降低性能。 (O(nlg(n))如果必须对列表进行排序)。
您应该查看List.Sort()方法。