import java.util.*;public class VLA2 implements Comparator<VLA2> {
    int dishSize;    public static void main(String[] args) {
        VLA2[] va = { new VLA2(40), new VLA2(200), new VLA2(60) };        Arrays.sort(va, va[0]);
        int index = Arrays.binarySearch(va, new VLA2(40), va[0]);
        System.out.print(index + " ");
        index = Arrays.binarySearch(va, new VLA2(80), va[0]);
        System.out.print(index);
    }    public int compare(VLA2 a, VLA2 b) {
        return b.dishSize - a.dishSize;
    }    VLA2(int d) {
        dishSize = d;
    }
}

解决方案 »

  1.   

    Arrays.sort(va, va[0]);
    是按逆序排列,排序后是:
    new VLA2(200), new VLA2(60), new VLA2(40) 
    Arrays.binarySearch(va, new VLA2(40), va[0]);这里的40的索引就是2.Arrays.binarySearch(va, new VLA2(80), va[0]);没有80,找不到
      

  2.   

    Arrays.sort()是按照升序排序
    但由于return b.dishSize - a.dishSize;的写法,造成事实上根据dishSize属性降序排序。排序后顺序为: 200,60,40
    所以new VLA2(40)的下标为2new VLA2(80)找不到,对于找不到的元素,Arrays.binarySearch()返回
    (-(插入点) - 1)
    这里插入点意思是假如把80插入到数组中去,它的下标是多少。
    对于原序列,80的插入点是1
    所以binarySearch返回-1-1,即-2