目次
結論は:
import java.util.Arrays;
class Person implements Comparable<Person>{
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Person o) {
return this.age - o.age;
}
}
public class Main{
public static void main(String args[]){
Person[] arr = new Person[3];
arr[0] = new Person("zhang", 10);
arr[1] = new Person("wang", 13);
arr[2] = new Person("li", 11);
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
解析:
整数配列を定義してからそれを並べ替える場合、Arrays.toString() メソッドを使用して配列を並べ替えることができ、システムはデフォルトで昇順に並べ替えます。
public static void main(String args[]){ int[] arr = {2,6,3,0,5,2}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); }
クラスを並べ替える必要がある場合はどうすればよいでしょうか?
まずクラスを定義します。
class Person{
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
このクラスができたので、それを並べ替えることができます。この時点で、クラスを直接並べ替えることができます。
public static void main(String args[]){ Person[] arr = new Person[3]; arr[0] = new Person("zhang", 10); arr[1] = new Person("wang", 13); arr[2] = new Person("li", 11); Arrays.sort(arr); System.out.println(Arrays.toString(arr)); }
エラーが報告されましたが、エラー メッセージから次のコードを見つけることができます。
このことから、世代ソート クラスを Comparable に キャストしているのに、クラスを Comparable にまったくキャストできず、エラーが発生していることが 明確にわかります。
エラーが発生した場所がわかったので、 修正後に Arrays.toString() メソッドを実装してクラスを並べ替えることができます。
この時点で、まずクラスを変更して Comparable インターフェイスを実装します。
次に、クラス内のcompareTo()メソッドを書き換えます。(age を使用して CompareTo() メソッドの戻り値を並べ替える場合:より大きいは 0 より大きい数値を返し、より小さいは 0 より小さい数値を返し、等しいは 0 を返します)
class Person implements Comparable<Person>{
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Person o) {
return this.age - o.age;
}
}
実行後、結果が年齢別に昇順に並べ替えられていることがわかります。