← 返回首页
JavaSE系列教程(三十九)
发表时间:2020-01-18 23:41:54
讲解List如何实现元素排序。

Java中提供了默认的对集合的排序方法,比如Collections.sort()方法,这是默认按照字典的顺序排序的。

1.实现Comparable接口

class Person implements Comparable<Person>{

    private String name;
    private String gender;
    private int age;

    public Person(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int compareTo(Person person) {   //重写Comparable接口的compareTo方法,
        return this.age - person.getAge(); // 根据年龄升序排列,降序修改相减顺序即可
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                '}';
    }
}
public class Test2 {

    public static void main(String[] args) {

        List list = new LinkedList();
        Person s1 = new Person("张三","男",20);
        Person s2 = new Person("李四","女",18);
        Person s3 = new Person("王五","男",21);
        Person s4 = new Person("赵六","女",22);

        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);

        Collections.sort(list);

        for(Object obj: list){
            System.out.println(obj);
        }

    }
}
运行结果:
Person{name='李四', gender='女', age=18}
Person{name='张三', gender='男', age=20}
Person{name='王五', gender='男', age=21}
Person{name='赵六', gender='女', age=22}

2.实现Comparator接口

class Person {

    private String name;
    private String gender;
    private int age;

    public Person(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Test2 {

    public static void main(String[] args) {

        List list = new LinkedList();
        Person s1 = new Person("张三", "男", 20);
        Person s2 = new Person("李四", "女", 18);
        Person s3 = new Person("王五", "男", 21);
        Person s4 = new Person("赵六", "女", 22);

        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);

        //匿名内部类实现排序
        Collections.sort(list, new Comparator<Person>() {
            @Override
            public int compare(Person p1, Person p2) {
                int diff = p1.getAge() - p2.getAge();
                if (diff > 0) {
                    return 1;
                } else if (diff < 0) {
                    return -1;
                }
                return 0; //相等为0
            }
        });

        for (Object obj : list) {
            System.out.println(obj);
        }

    }
}
运行结果:
Person{name='李四', gender='女', age=18}
Person{name='张三', gender='男', age=20}
Person{name='王五', gender='男', age=21}
Person{name='赵六', gender='女', age=22}

小结:

List序列实现元素排序使用Collections.sort(List list)和Collections.sort(List list,Comparator comparator)方法实现。