我想知道 Java 中 Comparable 接口的比较。假设我有两个节点,每个节点只有一个实例变量。node1.compareTo(node2) 是如何工作的?
谢谢!
Comparable是一个接口,因此它不包含任何逻辑。一个具体的类implement Comparable
必须实现.compareTo()
方法,详见此处。
实现此接口意味着您希望该类能够将自己与另一个实例进行比较,并返回一个数值,表示它应该被认为是“大于”还是“小于”传入的实例。这通常与集合中的排序一起使用.
例如:
public class Node implements Comparable<Node> {
private int id;
private String name;
public int compareTo(Node other) {
return (this.id < other.id ) ? -1 : (this.id > other.id) ? 1 : 0;
}
}
首先,阅读文档。
该接口对实现它的每个类的对象进行了总排序。这种排序称为类的自然排序,类的 compareTo 方法称为其自然比较方法。
compareTo()方法的文档:
将此对象与指定对象进行比较以进行排序。返回负整数、零或正整数,因为此对象小于、等于或大于指定对象。
这是一个示例:
public class MyComparable implements Comparable< MyComparable >{
private int value;
@Override
public int compareTo( MyComparable other ) {
return this.value - other.value;
}
public MyComparable( int i ) {
value = i;
}
public static void main( String[] args ) {
MyComparable _12 = new MyComparable( 12 );
MyComparable _42 = new MyComparable( 42 );
MyComparable _12bis = new MyComparable( 12 );
System.out.println( _12.compareTo( _42 ));
System.out.println( _42.compareTo( _12 ));
System.out.println( _12.compareTo( _12bis ));
}
}
它输出:
-30
30
0