在标准 Java 11 库中,如果未找到元素,方法应返回:
...大于键的第一个元素的索引...
在 Java 11 上,此示例打印 17
int[] data = new int[] {2, 4, 5, 12, 17, 19};
System.out.println(data[-1 *Arrays.binarySearch(data, 6)]);
Run Code Online (Sandbox Code Playgroud)
在这个代码示例中,第一个大于 6 的元素是 12,但它返回索引 17。为什么?
binarySearch?(int[] a, int key) :如果元素不存在,则返回 的索引(-(insertion point)-1)。所以在上面的情况下,插入点是3,表达式被评估为-4
(-(3)-1) --> (-3-1) --> -4
Run Code Online (Sandbox Code Playgroud)
而索引 4 对应值的数组是 17
Array --> {2, 4, 5, 12, 17, 19}
indexes -->0 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
搜索关键字的索引,如果它包含在数组中;否则,(-(插入点) - 1)。插入点定义为将键插入数组的点:大于键的第一个元素的索引,如果数组中的所有元素都小于指定的键,则为 a.length。请注意,这保证了当且仅当找到键时返回值将 >= 0。
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |