我试图了解Collections.binarySearch如何在Java中工作。
我不太明白我得到的输出。

public static void main(String args[]) {
      // create arraylist
      ArrayList<String>  arlst=new ArrayList<String> ();


      arlst.add("A");
      arlst.add("D");
      arlst.add("C");
      arlst.add("B");
      arlst.add("E");

      int index=Collections.binarySearch(arlst, "D", Collections.reverseOrder());

      System.out.println(index);


   }
}

该代码的输出为-1。

当按此顺序插入元素时
      arlst.add("D");
      arlst.add("E");
      arlst.add("C");
      arlst.add("B");
      arlst.add("A");

结果是0。我认为如果找不到该元素,则结果为负数。有人可以澄清我收到的输出吗?

最佳答案

您的数据必须根据给定的比较器进行排序,以使二进制搜索能够按预期工作。 (如果不是,则行为是不确定的。)



如果确实对数据进行了排序,则该方法将返回所寻求元素的索引(如果找到),否则返回(-(insertion point) - 1),如the documentation中所指定。

示例:

// Make sure it's sorted
Collections.sort(arlst, Collections.reverseOrder());

int index=Collections.binarySearch(arlst, "D", Collections.reverseOrder());

System.out.println(index);  // prints 1

10-04 14:22