Java で qsort を使用してクラスをソートするにはどうすればよいですか?

目次

結論は: 

解析: 


結論は: 

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;
    }
}

実行後、結果が年齢別に昇順に並べ替えられていることがわかります。 

おすすめ

転載: blog.csdn.net/2302_76339343/article/details/132429661