集合的排序

集合的排序

SortListDemo
package collection;

import java.util.*;

/**
 * 集合的排序
 * 集合的工具类java.util.Collections提供了一个静态的方法sort,可以对List进行自然排序
 */
public class SortListDemo {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        Random random = new Random();
        for(int i=0;i<10;i++){
            list.add(random.nextInt(100));
        }
        System.out.println(list);
        //自然排序 从小到大排序
        Collections.sort(list);
        System.out.println(list);
    }
}
SortListDemo2
package collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 自定义类型排序
 */
public class SortListDemo2 {
    public static void main(String[] args) {
        List<Point> list = new ArrayList<>();
        list.add(new Point(1, 2));
        list.add(new Point(97, 88));
        list.add(new Point(7, 6));
        list.add(new Point(9, 9));
        list.add(new Point(5, 4));
        list.add(new Point(2, 3));
        System.out.println(list);
        /*
        * Collections.sort(list);在排序List集合时,要求集合元素必须实现了
        * Comparator接口,实现了该接口的了必须重写一个方法,compare用于定义比较
        * 大小的规则,从而进行元素键的比较后排序,否则编译不通过
        * 侵入性:
        * 当我们调用某个API时,其反过来要求我们为其修改其他额外的代码,
        * 这种现象就称之为侵入性,侵入性不利于程序后期的维护,尽可能避免
        * */
//        Collections.sort(list,new Comparator<Point>() {
//            @Override
//            public int compare(Point o1, Point o2) {
//                /*
//                 * 定义两个参数o1和o2比较大小的规则
//                 * 返回值表示o1和o2的大小关系
//                 * */
//                int len1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
//                int len2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
//                return len1-len2;
//            }
//        });//回调模式
          //使用了lambda表达式省略了接口的声明和方法的重写体
//        Collections.sort(list, (o1, o2) -> {
//            int len1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
//            int len2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
//            return len1-len2;
//        });//回调模式
        //省略了花括号,并且省略了return
        Collections.sort(list, (o1, o2) ->
            o1.getX()*o1.getX()+o1.getY()*o1.getY()-
                    o2.getX()*o2.getX()+o2.getY()*o2.getY()
        );//回调模式
        System.out.println(list);
    }

}
SortListDemo3
package collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 排序字符串
 */
public class SortListDemo3 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("老安");
        list.add("小李子帅");
        list.add("刘文波");
        System.out.println(list);
        //Collections.sort(list);
        //Collections.sort(list,(o1,o2)->o1.length()-o2.length());
        //String::length 引用了String的length 相当于比较 o1.length() 和 o2.length
        Collections.sort(list, Comparator.comparingInt(String::length));
        System.out.println(list);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值