compareTo(Object o)方法如何在java中执行?

时间:2014-01-03 06:41:25

标签: java collections

我对在Java中执行compareTo方法感到困惑。

public int compareTo(Employee emp)
{
    int i = this.DeptId - emp.DeptId;

    if (i > 0)
        return 1;
    else if (i < 0)
        return -1;
    else
        return 0;
}

此方法将通过Employee类的对象调用,因此第一次调用它时,this.DeptId将是对象的DeptIdemp.DeptId此对象的DeptId }。

当第二次调用此方法时,应该再次使用第二个对象调用它,所以它应该return 0;,但事实并非如此。

我可以理解我不知道如何在Java中调用compareTo方法。有人可以解释或给我一个参考来说明这一点吗?

我正在使用此代码对其进行测试:

Employee e1 = new Employee(1, 11, "mfg", "Rajesh");
Employee e2 = new Employee(2, 12, "mfg", "Arka");       
Employee e3 = new Employee(3, 11, "pes" ,"Sanjeev");
list.add(e1);
list.add(e2);
list.add(e3);
Collections.sort(list);

我不明白Collections.sort(list);正在做什么。

第二次调用compareToe2.compareTo(e1);这就是我怀疑的地方。

3 个答案:

答案 0 :(得分:3)

如果您致电employee1.compareTo(employee2)thisemployee1empemployee2

换句话说,this.DeptId-emp.DeptId将为employee1.DeptId-employee2.DeptId

答案 1 :(得分:1)

所以第一次调用它时,this.DeptId将是对象的DeptId和emp.DeptId也是这个对象的DeptId。

这种说法是错误的。无论何时调用compareTo方法,它都会传入另一个对象作为方法的参数而不是同一个对象本身。

答案 2 :(得分:0)

java中的Compareto方法主要用于比较两个字符串,如

public class Test {

   public static void main(String args[]) {
      String str1 = "Strings are immutable";
      String str2 = "Strings are immutable";
      String str3 = "Integers are not immutable";

      int result = str1.compareTo( str2 );
      System.out.println(result);

      result = str2.compareTo( str3 );
      System.out.println(result);

      result = str3.compareTo( str1 );
      System.out.println(result);
   }
}

<强>输出:

0
10
-10

这里str1.compareTo( str2 );比较字符串1和2,即str1将是你的this对象,并根据它们之间的差异返回和整数。如果两个字符串相等,则返回0.

a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

检查此链接http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html http://www.tutorialspoint.com/java/java_string_compareto.htm