我试图了解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