Java中List的排序

ArrayList的两种排序方法

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

Collections.sort

    该方法必须实现Comparable接口。

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


        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='王五'}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值