我读到了:
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(反之亦然)可以正常工作.但是,它们与自己的类的实例不具有可比性,如果要向要排序的集合中添加更多项,则会产生问题.
为了使容器可以排序,您的类也需要与其自己的类型的实例相当.