Collect.sort()函数理解与重写

本文介绍如何使用Java的Collections.sort()函数对自定义类的对象数组进行排序,并提供了按学号和班级两种不同属性排序的具体示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Collect.sort()函数 结果默认升序(既1,2,3,4)排列,可通过重写compare方法实现自定义规则排序
说明:
1.下面的代码运行在main函数中,
2.创建Student类 属性
public int s_no;
public String s_name;
public int s_class;

/*
            Collect.sort()函数重写 
         */
        ArrayList<Student> studentArr = new ArrayList<Student>();
        Student s1 = new Student();
        s1.s_no = 3;
        s1.s_name = "a";
        s1.s_class = 102;
        studentArr.add(s1);
        Student s2 = new Student();
        s2.s_no = 2;
        s2.s_name = "b";
        s2.s_class = 101;
        studentArr.add(s2);
        Student s3 = new Student();
        s3.s_no = 1;
        s3.s_name = "c";
        s3.s_class = 103;
        studentArr.add(s3);
        System.out.println("排序前:");
        for (int i = 0; i < studentArr.size(); i++) {
            System.out.println("我是" + studentArr.get(i).s_class + "班的"
                            + studentArr.get(i).s_name + "学号是"
                            + studentArr.get(i).s_no);
        }
        //Collecttions.sort()的第一个参数是要比较的数据,第二个参数是比较规则
        Collections.sort(studentArr, new Comparator<Object>() {
                    public int compare(Object o1, Object o2) {
                        //你首先设置你要比较的东西
                        //具体是把参数中的Object强制转换成你要比较的东西,这里是两个Student类
                        //这里的s1,s2与上面的s1,s2一点关系都没有,只是抽象的前者与后者的关系
                        Student s1 = (Student) o1;
                        Student s2 = (Student) o2;
                        //如果前者的学号大于后者的学号,就是前者大于后者,返回1系统就会识别是前者大于后者
                        //升序降序用大于小于或者返回值决定(重点)
                        if (s1.s_no > s2.s_no) {
                            return -1;
                        }
                        //小于同理
                        if (s1.s_no < s2.s_no) {
                            return 1;
                        }
                        //如果返回0则认为前者与后者相等
                        return 0;
                    }
        });
        //比较完毕再输出以学号排序之后的结果
        System.out.println("按学号排序后:");
        for (int i = 0; i < studentArr.size(); i++) {
            System.out.println("我是" + studentArr.get(i).s_class + "班的"
                            + studentArr.get(i).s_name + "学号是"
                            + studentArr.get(i).s_no);
        }
        //以下是以班级排序的过程
        Collections.sort(studentArr, new Comparator<Object>() {
            public int compare(Object o1, Object o2) {
                Student s1 = (Student) o1;
                Student s2 = (Student) o2;
                if (s1.s_class > s2.s_class) {
                    return 1;
                }
                if (s1.s_class < s2.s_class) {
                    return -1;
                }
                return 0;
            }
        });
        System.out.println("按班级排序后:");
        for (int i = 0; i < studentArr.size(); i++) {
            System.out.println("我是" + studentArr.get(i).s_class + "班的"
                            + studentArr.get(i).s_name + "学号是"
                            + studentArr.get(i).s_no);
        }

文章内容来源于本人通过网络各方知识的学习,理解,总结,编辑。
仅用于学习。有拷贝网络相同的代码,只声明代码通过运行测试的正确性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值