为什么在使用Collections.binarySearch()时得到错误的答案

时间:2013-05-02 18:12:06

标签: java collections

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。

2 个答案:

答案 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()方法。