我读到:
每当需要对集合进行排序时,必须将元素
相互可比。
我写了下面的代码,它可以正常工作。您能否说出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
可相互比较,需要满足以下要求:
必须允许通过compareTo
实例调用A
实例上的B
调用
必须允许通过compareTo
实例调用B
实例上的A
调用
如果a.compareTo(b)
返回x
,则当b.compareTo(a)
为零时,y
必须返回带有相反符号或为零的值x
。
您的代码中的类不能相互比较,因为尝试将c
的实例传递给b
的compareTo
(反之亦然)很好。但是,它们与它们自己的类的实例不具有可比性,如果您要向要排序的集合中添加更多项目,则会产生问题。
为了使容器可排序,您的类也必须与其自身类型的实例相当。
关于java - “相互可比”是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25612648/