欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中List的排序

程序员文章站 2022-06-10 22:16:27
...

ArrayList的两种排序方法

  • Collections.sort(List <T>list);
  • 使用Comparator接口

Collections.sort

    该方法必须实现Comparable接口。

    该例中,Integer实现了Comparable接口所以可以使用。

Java中List的排序

        int a[] = {1, 32, 3, 2, 6, 7, 4};
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 7; i++) {
            list.add(a[i]);
        }
        for (int t : list)
            System.out.print(t + "  ");
        System.out.println();
        //Collections的sort方法,传入要排序的集合
        Collections.sort(list);
        for (int t : list)
            System.out.print(t + "  ");
输出结果:1  32  3  2  6  7  4  

                 1  2  3  4  6  7  32 

使用Comparator接口

        int a[] = {1, 32, 3, 2, 6, 7, 4};
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 7; i++) {
            list.add(a[i]);
        }
        for (int t : list)
            System.out.print(t + "  ");
        System.out.println();
        Comparator comparator = new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                if ((int) o1 < (int) o2)
                    return 1;

                return -1;
            }
        };
        list.sort(comparator);
        System.out.println();

这里注意两个地方

  •     return 语句中,如果if成立和if不成立的返回值在JDK1.7之后必须为相反值。如果不是相反值,执行无效。
  •     o1 如果大于o2我们实现的是升序排序,如果o1小于o2,则是降序排列

另外我们还注意到,除了Comparator接口,还有一个Comparable接口。

这个Comparable接口是什么意思呢?Comparable实现对类的排序,换言之,如果一个类继承了Comparable接口,我们可以说这个类可以被排序,即可以使用Collections.sort(List<T> list)。而Comparator的意思是,一个不能被排序的类,我们通过使用Comparator接口,对他进行排序。

Comparable接口的使用

我们来假定一个类Person,里面有两个属性 int age和String name,如果我们想把Person类的对象按age的大小排序怎么实现?

1.我们可以把Person类,使用泛型装入集合中。

2.使用Collections.sort(List <T> list)进行排序,该sort方法必须实现Comparable接口

public class Person implements Comparable<Person> {
    int age;
    String name;

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

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

    @Override
    public int compareTo(Person person) {
        return name.compareTo(person.name);
        //假设我们通过 x.compareTo(y) 来“比较x和y的大小”。
        // 若返回“负数”,意味着“x比y小”;
        // 返回“零”,意味着“x等于y”;
        // 返回“正数”,意味着“x大于y”。
    }
}
public class Test {
    public static void main(String[] args) {
        List<Person> list =new ArrayList<>();
        list.add(new Person(20,"李四"));
        list.add(new Person(19,"张三"));
        list.add(new Person(21,"王五"));
        Collections.sort(list);
        for (Person p :list)
            System.out.println(p.toString());

    }
}
输出:
Person{age=19, name='张三'}
Person{age=20, name='李四'}
Person{age=21, name='王五'}