Java如何对对象数组进行排序?

在此示例中,我们将学习如何对对象数组进行排序。我们从使用String对象数组开始,如下面的代码片段所示。我们使用Arrays.sort()方法对数组的内容进行排序,并打印排序后的结果。真的很简单。

String names[] = {"Bob", "Mallory", "Alice", "Carol"};
Arrays.sort(names);
System.out.println("Names = " + Arrays.toString(names));

接下来,我们将对我们自己的对象的数组进行排序。与对基元数组进行排序相比,这有点不同。第一条规则是我们需要我们的对象来实现Comparable接口。此接口有一个我们需要执行的compareTo()合同,即合同。

该compareTo()  方法的基本规则是,0如果对象值相等,1该对象值较大且-1该对象值较小,则返回。在Person下面的类中,我们仅调用String对象compareTo()方法。有关Person更多详细信息,请参见下面的类。

package org.nhooo.example.util.support;

public class Person implements Comparable {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public int compareTo(Object o) {
        Person p = (Person) o;
        return this.name.compareTo(p.name);
    }

    public String toString() {
        return name;
    }
}

在下面的代码段中,我们创建了四个Person对象。我们Person使用Arrays.sort()方法根据对象的名称对对象进行排序,并打印出数组值。

Person persons[] = new Person[4];
persons[0] = new Person("Bob");
persons[1] = new Person("Mallory");
persons[2] = new Person("Alice");
persons[3] = new Person("Carol");
Arrays.sort(persons);
System.out.println("Persons = " + Arrays.toString(persons));

这是您可以运行上面所有代码段的主要类:

package org.nhooo.example.util;

import org.nhooo.example.util.support.Person;

import java.util.Arrays;

public class ObjectSortExample {
    public static void main(String[] args) {
        String names[] = {"Bob", "Mallory", "Alice", "Carol"};
        Arrays.sort(names);
        System.out.println("Names = " + Arrays.toString(names));

        Person persons[] = new Person[4];
        persons[0] = new Person("Bob");
        persons[1] = new Person("Mallory");
        persons[2] = new Person("Alice");
        persons[3] = new Person("Carol");
        Arrays.sort(persons);
        System.out.println("Persons = " + Arrays.toString(persons));
    }
}

此代码段将打印以下输出:

Names = [Alice, Bob, Carol, Mallory]
Persons = [Alice, Bob, Carol, Mallory]