0
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);
  }
}

Here I am getting ans as -3 (as it is telling me at what location it is going to be added) but I already have b in my list.

4

2 に答える 2

1

Collections.binarySearch()検索を試みる前にリストがソートされていることを保証しません。を呼び出す前に、それが事実であることを確認する必要がありますbinarySearch()

最初にリストをチェックすると、O(lg(n)) 検索が O(n+lg(n)) チェック/検索になり、パフォーマンスが低下します。(O(nlg(n)) リストもソートする必要がある場合)。

おそらくList.Sort()メソッドを確認する必要があります。

于 2013-05-02T18:20:19.590 に答える