Java List排序

1. List排序是我们经常用到的。
2. 2种方法
    collections.sort(List<T> list)
    //对list进行升序排列. 列表中所有的元素必须执行了Comparable接口 ,即列表中所有的元素都是可以相互 比较的(e1.compareTo(e2)。util实现的排序方法是稳定排序 
    collections.sort(List<T> list, Comparator<? super T> c)
    //可以自定义排序(自定义排序顺序,可以降序升序)
3. 举例
    //方法1,list中对象试想comparable接口
    class Stu implements Comparable<Stu>
    {
        String name;
        int age;
        public Stu(String name, int age) {
            // TODO Auto-generated constructor stub
            this.name = name;
            this.age = age;
        }

        public void print(){
            System.out.println(age + "\t" + name);
        }

        @Override
        public int compareTo(Stu o) {
            // TODO Auto-generated method stub
            int num = age - o.age;
            if(num == 0){
                return name.compareTo(o.name);
            }
            return num;
        }
        public static void main(String[] args) {
            List<Stu> list = new ArrayList<>();
            Stu e1 = new Stu("a", 10);
            list.add(e1);
            Stu e2 = new Stu("a", 11);
            list.add(e2);
            Stu e3 = new Stu("b", 10);
            list.add(e3);
            Collections.sort(list);
            for(Stu e : list)
            {
                e.print();
            }
        }
    }

//方法2重载Collections.sort()函数
class Stu
{
    String name;
    int age;
    public Stu(String name, int age) {
        // TODO Auto-generated constructor stub
        this.name = name;
        this.age = age;
    }

    public void print(){
        System.out.println(age + "\t" + name);
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<Stu> list = new ArrayList<>();
        Stu e1 = new Stu("a", 10);
        list.add(e1);
        Stu e2 = new Stu("a", 11);
        list.add(e2);
        Stu e3 = new Stu("b", 10);
        list.add(e3);
        Collections.sort(list, new Comparator<Stu>() {
            public int compare(Stu o1, Stu o2) 
            {
                int num = o1.age - o2.age;
                if(num == 0){
                    return o1.name.compareTo(o2.name);
                }
                return num;
            };
        });
        for(Stu e : list)
        {
            e.print();
        }
    }
}

其实Collections.sort()函数的内部实现是调用list.sort()函数->将list变为数组toArray()->对数组排序Arrays.sort()
即上面也可以改为
public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<Stu> list = new ArrayList<>();
        Stu e1 = new Stu("a", 10);
        list.add(e1);
        Stu e2 = new Stu("a", 11);
        list.add(e2);
        Stu e3 = new Stu("b", 10);
        list.add(e3);
        list.sort(new Comparator<Stu>() {
            public int compare(Stu o1, Stu o2) 
            {
                int num = o1.age - o2.age;
                if(num == 0){
                    return o1.name.compareTo(o2.name);
                }
                return num;
            };
        });
        for(Stu e : list)
        {
            e.print();
        }
    }
    或者
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<Stu> list = new ArrayList<>();
        Stu e1 = new Stu("a", 10);
        list.add(e1);
        Stu e2 = new Stu("a", 11);
        list.add(e2);
        Stu e3 = new Stu("b", 10);
        list.add(e3);
        Stu[] array = (Stu[]) list.toArray(new Stu[list.size()]);
        Arrays.sort(array, new Comparator<Stu>() {
            public int compare(Stu o1, Stu o2) 
            {
                int num = o1.age - o2.age;
                if(num == 0){
                    return o1.name.compareTo(o2.name);
                }
                return num;
            };
        });
        for(Stu e : list)
        {
            e.print();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值