输入包含重复项时java.util.Arrays.binarySearch()的结果

输入包含重复项时java.util.Arrays.binarySearch()的结果,java,arrays,duplicates,binary-search,Java,Arrays,Duplicates,Binary Search,通常我自己写二进制搜索函数。现在我尝试使用java.util.Arrays提供的内置函数。我发现了一些我无法解释的奇怪的事情。有人能帮忙吗 考虑以下代码段: 1. int[] a = {5, 7, 7, 8, 8, 8, 10}; 2. System.out.println(Arrays.binarySearch(a, 8)); 3. System.out.println(Arrays.binarySearch(a, 0, 7, 8)); 4. System.out.println(Arrays

通常我自己写二进制搜索函数。现在我尝试使用java.util.Arrays提供的内置函数。我发现了一些我无法解释的奇怪的事情。有人能帮忙吗

考虑以下代码段:

1. int[] a = {5, 7, 7, 8, 8, 8, 10};
2. System.out.println(Arrays.binarySearch(a, 8));
3. System.out.println(Arrays.binarySearch(a, 0, 7, 8));
4. System.out.println(Arrays.binarySearch(a, 0, 6, 8));
5. int[] a2 = {5, 7, 7, 8, 8, 10};
6. System.out.println(Arrays.binarySearch(a2, 8));
第2行和第3行的输出是3,这是我所期望的(下限)。
但是第4行和第6行的输出是4

我搜索了Java文档,但没有找到任何关于此问题的答案。

来自文档:

在指定整数数组的范围内搜索指定的整数 值使用二进制搜索算法。必须对范围进行排序(如所示) 在进行此调用之前,通过排序(int[],int,int)方法。如果是 未排序,结果未定义如果范围包含 具有指定值的多个元素,不保证 将找到哪一个。


该方法返回要搜索的元素的索引,并从

如果数组包含多个具有指定值的元素,则无法保证找到哪个元素


您是如何漏掉的:如果数组包含多个具有指定值的元素,则无法保证会找到哪个元素。在Javadoc中?是的,你是对的。我没注意到。谢谢