java – “互相比较”是什么意思?

我读到了:

whenever a collection need to be sorted, the elements must be
mutually comparable.

我写了下面的代码,它工作正常.你能否告诉我们b类和c类是如何相互比较的,以及“相互比较”的含义是什么?

import java.util.ArrayList;
import java.util.Collections;

class b implements Comparable<c> {
    String str1;

    b(String str1) {
        this.str1 = str1;
    }

    public int compareTo(c object) {
        return str1.compareTo(object.str1);
    }
}

class c implements Comparable<b> {
    String str1;

    c(String str1) {
        this.str1 = str1;
    }

    public int compareTo(b object) {
        return str1.compareTo(object.str1);
    }
}

public class a {

    public static void main(String[] args) {
        b obj1 = new b("monster");
        c obj2 = new c("aman");

        ArrayList list  = new ArrayList();
        list.add(obj1);
        list.add(obj2);
        System.out.println("unsorted list = "+list);
        Collections.sort(list);
        System.out.println("sorted list = "+list);
    }
}

解决方法:

为了使A类和B类相互比较,需要满足这些要求:

>必须允许在传递B实例的A实例上调用compareTo
>必须允许在传递A实例的B实例上调用compareTo
>如果a.compareTo(b)返回x,则b.compareTo(a)必须返回具有相反符号的值y,或者当x为零时返回零.

代码中的类不可相互比较,因为尝试将c的实例传递给b的compareTo(反之亦然)可以正常工作.但是,它们与自己的类的实例不具有可比性,如果要向要排序的集合中添加更多项,则会产生问题.

为了使容器可以排序,您的类也需要与其自己的类型的实例相当.

上一篇:java-为什么Collections.binarySearch()不能与之媲美?


下一篇:java – 使用Collections.sort(object)比较Long值