compareTo()
関数に関するいくつかの回答を読んでいますが、内部的にどのように動作するかはまだ分かりません。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);
}
}
そして1 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)
はthis.id
とどのemp.id
である、そしてcompareTo()
の内側に、呼び出されたとき?
compareTo()
が呼び出されると、employee
のオブジェクトがempArr
から現在のオブジェクトになり、次にどのオブジェクトで比較されているのかを理解しようとしています。
return (this.id - emp.id);
だからthis
とemp
何ですか?
'sort'メソッドは、ソート中に比較する必要がある配列内のインスタンスに対して' compareTo'を呼び出します。 「現在のオブジェクト」はありません。これは、ソート・アルゴの実装によって駆動されます。 – pvg
他の機能と同様に機能します。場合によっては呼び出され、パラメータがあります。 – SLaks
'public int compareTo(Employee that)'と書くと、理解しやすくなります。あなたがしていることは、「これ」と「それ」を比較することだけです。 – EJP