关于Collections类的binarySearch使用,为什么binarySearch返回值为负数,还会抛异常,求解

发布于 2022-09-06 23:36:21 字数 1481 浏览 14 评论 0

Student.java

private int age;
private String name;

public Student(int age, String name){
    this.name = name;
    this.age = age;
}

public void setAge(int age) {
    this.age = age;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public String toString(){
    return "age:" + age + "\t" + "Name:" + name;
}

Main.java

public class Main {

public static void main(String[] args) {
    Student stu1 = new Student(48, "jre");
    Student stu2 = new Student(25, "JIe");
    Student stu3 = new Student(47, "Lil");
    Student stu4 = new Student(40, "Lilith");
    Student stu5 = new Student(20, "Jack");

    LinkedList linkedList = new LinkedList();
    linkedList.add(stu5);
    linkedList.add(stu4);
    linkedList.add(stu3);
    linkedList.add(stu2);
    linkedList.add(stu1);

    Collections.sort(linkedList, (Student o1, Student o2) ->{
        if (o1.getAge() > o2.getAge()){
            return 1;
        }else if (o1.getAge() == o2.getAge()){
            return 0;
        }else
            return -1;
    });

    int index = Collections.binarySearch(linkedList, stu2);
    System.out.println("二分查找法查找出的Index为:" + index);
    System.out.println("二分查找法查找出的值为:" + linkedList.get(index));

    Iterator it = linkedList.iterator();
    it.forEachRemaining(e -> System.out.println(e));
}

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

橘亓 2022-09-13 23:36:21

类转换错误?

private static <T>
    int indexedBinarySearch(List<? extends Comparable<? super T>> list, T key) {
        int low = 0;
        int high = list.size()-1;

        while (low <= high) {
            int mid = (low + high) >>> 1;
            Comparable<? super T> midVal = list.get(mid);
            int cmp = midVal.compareTo(key);

            if (cmp < 0)
                low = mid + 1;
            else if (cmp > 0)
                high = mid - 1;
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found
    }

int index = Collections.binarySearch(linkedList, stu2);
Student需要implements Comparable接口

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文