我读了一些关于compareTo()
函数的答案,但我还不清楚它是如何在内部工作的。
我有以下代码片段,我正在努力理解。
public class Employee implements Comparable<Employee> {
private int id;
private String name;
private int age;
private long salary;
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public long getSalary() {
return salary;
}
public Employee(int id, String name, int age, int salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
@Override
public int compareTo(Employee emp) {
//let's sort the employee based on id in ascending order
//returns a negative integer, zero, or a positive integer as this employee id
//is less than, equal to, or greater than the specified object.
return (this.id - emp.id);
}
}
一个CompareClass
为:
public class CompareClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
Employee[] empArr = new Employee[4];
empArr[0] = new Employee(10, "Mikey", 25, 10000);
empArr[1] = new Employee(20, "Arun", 29, 20000);
empArr[2] = new Employee(5, "Lisa", 35, 5000);
empArr[3] = new Employee(1, "Pankaj", 32, 50000);
//sorting employees array using Comparable interface implementation
Arrays.sort(empArr);
System.out.println("Default Sorting of Employees list:\n"+Arrays.toString(empArr));
}
}
所以当调用Arrays.sort(empArr)
时,然后在compareTo()
内,this.id
,emp.id
?
基本上我试图理解,当compareTo()
被调用时,来自employee
的{{1}}对象成为当前对象,然后,它将与哪个对象进行比较。
empArr
那么return (this.id - emp.id);
和this
是什么?
答案 0 :(得分:2)
那么&#34;这个&#34;和&#34; emp&#34; ?
那么,看看你在写什么方法!这是compareTo
方法。它可以像这样调用:
a.compareTo(b)
在这种情况下,a
为this
,b
为emp
。
但this
方法调用emp
时,sort
和compareTo
实际上是什么?
要找到这一点,您需要了解sort
的实施方式。在我的JDK版本中,sort
最终调用binarySort
中声明的名为ComparableTrimSort.class
的方法。在binarySort
中,有以下几行:
while (left < right) {
int mid = (left + right) >>> 1;
if (pivot.compareTo(a[mid]) < 0) // <--- here is the compareTo call
right = mid;
else
left = mid + 1;
}
assert left == right;
sort
也可能会在很多其他地方调用compareTo
。我的建议是不关心sort
做什么,只需实现compareTo
方法。返回一个值,指示this
是否等于,小于或大于参数。
答案 1 :(得分:0)
如果查看compareTo
函数上的参数,它有"Employee emp"
作为参数,Employee是类型,emp是用来引用它的名称。为了将对象与另一个对象进行比较,可以使用其中一个对象并使用compareTo函数将其与另一个对象进行比较。因此,您需要一种方法来引用当前使用的对象,在这种情况下,我们使用this
来访问对象内部的变量,并使用emp来引用作为传递的Employee参数。在这种情况下,this
不是获取当前对象的id所必需的,但在其他情况下,如果存在具有相同名称的局部变量,则需要执行此操作。