我读到:


每当需要对集合进行排序时,必须将元素
相互可比。


我写了下面的代码,它可以正常工作。您能否说出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);
    }
}

最佳答案

为了使类AB可相互比较,需要满足以下要求:


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


您的代码中的类不能相互比较,因为尝试将c的实例传递给bcompareTo(反之亦然)很好。但是,它们与它们自己的类的实例不具有可比性,如果您要向要排序的集合中添加更多项目,则会产生问题。

为了使容器可排序,您的类也必须与其自身类型的实例相当。

关于java - “相互可比”是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25612648/

10-10 18:27