-3

我想知道 Java 中 Comparable 接口的比较。假设我有两个节点,每个节点只有一个实例变量。node1.compareTo(node2) 是如何工作的?

谢谢!

4

2 回答 2

1

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;
    } 
}
于 2013-04-13T16:56:02.927 回答
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
  • -30 (<0) 表示 12 < 42,不足为奇
  • 30 (>0) 表示 42 > 12,ok
  • 0 (=0) 表示 12 等于 12,看起来是正确的
于 2013-04-13T16:55:40.660 回答