《JDK6学习笔记》中关于BinarySearchDemo的理解

《JDK6学习笔记》p524页的BinarySearchDemo有这么一句,System.out.printf("插入点 %d %n", (result + 1) * -1),第一次看到的时候没有理解,为什么插入点的位置就是(result+1)*-1呢,后来查阅JDK文档中关于binarySearch方法的使用,才知道,如果在涉及的有序数组中没有key,则返回-(insert point)-1,而insert point就是插入的位置,如果数组第一个元素的索引值大于key(比如key=-3),而且key如果比数组的每个元素值都大,则返回-1,或者如果数组的所有元素都比key小,则返回数组的length,那么(result + 1) * -1应该写成-(result)-1更好理解,那么根据林先生对数组索引的解释,即数组索引是对数组第一个元素位置的“offset”,比如a[0]的位置表示相对第一个元素位置偏移量为0,a[1]位置偏移量为1,而如果result为负值的话,result相对于0偏移则为result+1,比如-9相对于0偏移是8而不是9,因为数组是从0开始下标的,而不是从1开始下标的,理解了这点就不难理解林先生为什么要写成(result + 1) * -1了,BinarySearchDemo源代码如下:

package cn.edu.xbmu.lib.jfly.test;

import java.util.Arrays;

/**
 *
 * @author Administrator
 */
public class BinarySearchDemo {

    public static void main(String[] args) {
        int[] arr1 = {10, 20, 30, 40, 50, 60, 70, 80, 90};
        int result = Arrays.binarySearch(arr1, 6, 9, 85);

        if (result > -1) {
            System.out.printf("索引 %d 处找到数据%n", result);
        } else {
            System.out.printf("result的值为 %d %n", result);
            System.out.printf("插入点 %d %n", (result + 1) * -1);
            // binarySearch的JavaDoc中说,该方法返回的是key的位置,如果找不到到key,
        // 返回值为-(insert point)-1,这个值必定小于-1,那么找到的话必定大于-1,这就是用result > -1判断的原因
        }
    }
}

 

 

你可能感兴趣的:(jdk)