Java中的binarySearch方法

今天学到Arrays的binarySearch方法,试着用自己定义的Father类作为数组的元素,类中有一个int age和String name,然后我想用binarySort搜索数组中的一个Father类对象,运行后报错,想问问这个方法可以这么用吗?
public class test4 {
    public static void main(String[] args) {

        Father[] arr = new Father[4];
        Father fa = new Father(3,"aassdfasg");
        arr[0] = fa;
        arr[1] = new Father(2,"gdf");
        arr[2] = new Father(5,"dada");
        arr[3] = new Father(1,"qghdfg");

        Arrays.sort(arr, new Comparator() {
            @Override
            public int compare(Father o1, Father o2) {
                return o1.getAge() - o2.getAge();
            }
        });
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.binarySearch(arr, fa));
    }
}

Exception in thread "main" java.lang.ClassCastException: class test.Father cannot be cast to class java.lang.Comparable (test.Father is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')
at java.base/java.util.Arrays.binarySearch0(Arrays.java:2232)
at java.base/java.util.Arrays.binarySearch(Arrays.java:2174)
at test.test4.main(test4.java:25)

二分查找 binarySearch 里的逻辑可以看下,查找的对象需要 实现Comparable 接口,并重写 compareTo 方法

img

可以参考 String 类

img


public class Father implements Comparable<Father> {
    @Override    
    public int compareTo(Father another) {
        return this.getAge() - another.getAge();
    }
}

如有帮助,欢迎采纳哈!

在这里插入图片描述

本人的开源项目,欢迎star支持下!!!

Father类要继承Comparable类,重写comparato方法,这样才能确定哪个对象大了小了还是相等