mymzhbxm 2022-11-26 23:17 采纳率: 100%
浏览 2
已结题

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<Father>() {
            @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)
  • 写回答

2条回答 默认 最新

  • Huazie 全栈领域优质创作者 2022-11-27 00:13
    关注

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

    img

    可以参考 String 类

    img


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

    如有帮助,欢迎采纳哈!

    在这里插入图片描述

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月5日
  • 已采纳回答 11月27日
  • 创建了问题 11月26日