J'ai lu quelques réponses concernant la fonction compareTo()
mais je ne sais toujours pas comment cela fonctionne en interne. J'ai l'extrait de code ci-dessous que j'essaie de comprendre.Comment fonctionne 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);
}
}
Et un CompareClass
comme:
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));
}
}
Alors, quand Arrays.sort(empArr)
est appelé, puis à l'intérieur compareTo()
, qui est le this.id
et qui est emp.id
?
Fondamentalement, j'essaie de comprendre, quand compareTo()
est appelé, puis employee
objet de empArr
devient l'objet actuel, puis, avec quel objet il est comparé.
return (this.id - emp.id);
Alors quel est this
et emp
?
La méthode 'sort' appelle' compareTo' sur les instances du tableau qui doivent être comparées pendant le tri. Il n'y a pas d '"objet courant", ceci est piloté par l'implémentation de l'algo de tri. – pvg
Cela fonctionne comme n'importe quelle autre fonction. Il est appelé sur une instance, et il a un paramètre. – SLaks
Vous trouverez cela beaucoup plus facile à comprendre si vous l'écrivez comme 'public int compareTo (Employee that)'. Tout ce que vous faites est de comparer "ceci" à "ça". – EJP