Java语法---使用sort进行排序

目录

一、升序

二、降序

(1)类实现接口

(2)匿名内部类

三、自定义排序规则

四、集合中的sort排序

(1)升序

(2)降序

(3)自定义排序 


一、升序

升序排序就是按照从小到大排序。(注意,想进行排序的话,基本数据类型要换成包装类,就像int型要写成Integer)

 public static void main(String[] args) {
        Integer[] a={1,19,20,3,12,100,987,32};

        System.out.print("排序前: ");
        for(int i:a){
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.print("排序后(升序): ");
        
        //开始使用sort进行升序排序
        Arrays.sort(a);
        for(int i:a){
            System.out.print(i+" ");
        }
    }

二、降序

想要使用sort进行降序排序,我们需要使用Comparator接口,这里有两种方式可以实现,一种是类实现接口,一种是匿名内部类,我们都讲一下。

(1)类实现接口

//程序入口
public class main1 {
    public static void main(String[] args) {
        Integer[] a={1,19,20,3,12,100,987,32};

        System.out.print("排序前: ");
        for(int i:a){
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.print("排序后(降序): ");

        Arrays.sort(a,new myCom());
        for(int i:a){
            System.out.print(i+" ");
        }
    }
}

//排序类
class myCom implements Comparator<Integer>{
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2-o1;
    }
}

(2)匿名内部类

public static void main(String[] args) {
        Integer[] a={1,19,20,3,12,100,987,32};

        System.out.print("排序前: ");
        for(int i:a){
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.print("排序后(降序): ");

        Arrays.sort(a, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
        for(int i:a){
            System.out.print(i+" ");
        }
    }

 

三、自定义排序规则

 这里我们自定义一个学生类,有name属性和age属性,我们按照年龄从大到小排序,如果年龄相等,就按照名字降序。

 

public static void main(String[] args) {
        student[] students=new student[5];

        //这里创建对象数组的时候,还要new一下,别忘了!这个很容易忽略,当然,你也可以声明数组的时候就初始化数据
        students[0]=new student();
        students[0].setAge(10);
        students[0].setName("bac");

        students[1]=new student();
        students[1].setAge(10);
        students[1].setName("cac");

        students[2]=new student();
        students[2].setAge(10);
        students[2].setName("aac");

        students[3]=new student();
        students[3].setAge(18);
        students[3].setName("op");

        students[4]=new student();
        students[4].setAge(8);
        students[4].setName("lisi");

        System.out.println(students[0]);
        System.out.print("排序之前");
        for(int i=0;i<students.length;i++){
            System.out.println(students[i].getName()+" "+students[i].getAge());
        }
        Arrays.sort(students, new Comparator<student>() {
            @Override
            public int compare(student o1, student o2) {
                if(o1.getAge()==o2.getAge()){
                    return o2.getName().compareTo(o1.getName());
                }
                return o2.getAge()-o1.getAge();
            }
        });
        System.out.println();

        for(int i=0;i<students.length;i++){
            System.out.println(students[i].getName()+" "+students[i].getAge());
        }
    }

四、集合中的sort排序

前面介绍的sort是数组的排序,集合中其实也一样,只不过Arrays.sort换成了Collections.sort

(1)升序

  public static void main(String[] args) {
        List<Integer> integerList=new ArrayList<>();
        integerList.add(18);
        integerList.add(10);
        integerList.add(20);
        integerList.add(3);
        integerList.add(17);
        System.out.println("排序前");
        for(Integer i:integerList){
            System.out.println(i);
        }
        System.out.println("排序后");
        //进行升序排序
        Collections.sort(integerList);
        for(Integer i:integerList){
            System.out.println(i);
        }
    }

(2)降序

与上面一样有两种方式实现,匿名内部类和类的实现接口,这里我就只写了匿名内部类的方法,另外一种可以看上面的数组排序。

 public static void main(String[] args) {
        List<Integer> integerList=new ArrayList<>();
        integerList.add(18);
        integerList.add(10);
        integerList.add(20);
        integerList.add(3);
        integerList.add(17);
        System.out.println("排序前");
        for(Integer i:integerList){
            System.out.println(i);
        }
        System.out.println("排序后");
        Collections.sort(integerList, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
        for(Integer i:integerList){
            System.out.println(i);
        }
    }

(3)自定义排序 

还是和上面的需求一样,年龄从小到大排序,年龄一样按照名字大的在前面

 public static void main(String[] args) {
        List<student> students=new ArrayList<>();
        students.add(new student("abc",19));
        students.add(new student("cbc",19));
        students.add(new student("bbc",19));
        students.add(new student("abc",9));
        students.add(new student("abc",30));
        System.out.println("排序前");
        for(student i:students){
            System.out.println(i);
        }
        System.out.println("排序后");

        //进行自定义排序
        Collections.sort(students, new Comparator<student>() {
            @Override
            public int compare(student o1, student o2) {
                if(o1.getAge()==o2.getAge()){
                    return o2.getName().compareTo(o1.getName());
                }
                return o2.getAge()-o1.getAge();
            }
        });
        for(student i:students){
            System.out.println(i);
        }
    }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/266348.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3+Ts

安装 命令含义可参考typescript文章中的自动编译部分 npm create vitelatest vuets-project -- --template vue-tsvs code插件 Vue Language Features (Volar)对.vue文件进行实时的类型错误反馈TypeScript Vue Plugin (Volar) 用于支持在TS中import*.vue文件&#xff08;mai…

08-JVM调优实战及常量池详解

文章目录 阿里巴巴Arthas详解Arthas使用场景Arthas使用 GC日志详解打印GC日志方法如何分析GC日志CMSG1 JVM参数汇总查看命令Class常量池与运行时常量池字面量符号引用 字符串常量池字符串常量池的设计思想三种字符串操作(Jdk1.7 及以上版本)字符串常量池位置字符串常量池设计原…

C语言——高精度除法

一、引子 1、引言 高精度除法相较于加减乘法更加复杂&#xff0c;它需要处理的因素更多&#xff0c;在这里我们先探讨高精度数除以低精度数&#xff0c;即大数除小数。这已满足日常所需&#xff0c;如需大数除以大数&#xff0c;可以使用专门的库&#xff0c;例如&#xff1a…

3.Redis持久化

文章目录 RDB&#xff08;Redis DataBase&#xff09;&#xff1a;RDB是什么&#xff1f;RDB能干嘛&#xff1f;RDB自动触发RDB手动触发RDB优点RDB缺点什么情况会触发RDB快照 AOF&#xff08;Append Only File&#xff09;&#xff1a;AOF是什么&#xff1f;AOF能干嘛&#xff…

【Hadoop】 YARN 运行过程/YARN设计目标

YARN 运行过程剖析YARN设计目标 YARN 运行过程剖析 一个Job在YARN中的处理过程&#xff1a; 客户端向RM提交一个job&#xff0c;进入RM中的调度器队列以供调度RM中的AppManager与NM协商协商好一个容器&#xff0c;以启动一个App Master实例App Master启动之后向RM注册并根据Jo…

刷题第五十一天 84. 柱状图中最大矩形

好难&#xff0c;看解析&#xff1a; # 双指针 class Solution:def largestRectangleArea(self, heights: List[int]) -> int:size len(heights)# 两个DP数列储存的均是下标indexmin_left_index [0] * sizemin_right_index [0] * sizeresult 0# 记录每个柱子的左侧第一…

量化服务器 - 后台挂载运行

服务器 - 后台运行 pip3命令被kill 在正常的pip命令后面加上 -no-cache-dir tmux 使用教程 https://codeleading.com/article/40954761108/ 如果你希望在 tmux 中后台执行一个 Python 脚本&#xff0c;你可以按照以下步骤操作&#xff1a; 启动 tmux: tmux这将会创建一个新…

Ubuntu 常用命令之 ps 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 ps命令是Linux下的一个非常重要的命令&#xff0c;它用于查看系统中的进程状态。ps是Process Status的缩写&#xff0c;可以显示系统中当前运行的进程的状态。 以下是一些常用的参数 a&#xff1a;显示所有进程&#xff08;包括…

【机器学习】决策树

参考课程视频&#xff1a;https://www.icourse163.org/course/NEU-1462101162?tid1471214452 1 概述 样子&#xff1a; 2 分裂 2.1 分裂原则 信息增益 信息增益比 基尼指数 3 终止 & 剪枝 3.1 终止条件 无需分裂 当前节点内样本同属一类 无法分裂 当前节点内…

【数据结构】四、串

目录 一、定义 二、表示与实现 定长顺序存储 堆分配存储 链式存储 三、BF算法 四、KMP算法 1.求next数组 方法一 方法二&#xff08;考试方法&#xff09; 2.KMP算法实现 方法一 方法二 3.nextval 4.时间复杂度 本节最重要的就是KMP算法&#xff0c;其他要求不高…

融资项目——swagger2的注解

1. ApiModel与ApiModelProperty(在实体类中使用) 如上图&#xff0c;ApiModel加在实体类上方&#xff0c;用于整体描述实体类。ApiModelProperty(value"xxx",example"xxx")放于每个属性上方&#xff0c;用于对属性进行描述。swagger2网页上的效果如下图&am…

c++内存池项目

文章目录 一、内存池介绍二、ThreadCache实现三、CentralCache实现四、PageCache实现五、回收内存六、大于256KB的内存申请与释放七、将new和delete换为定长内存池八、多线程环境下对比malloc进行基准测试九、使用基数树进行性能优化 一、内存池介绍 二、ThreadCache实现 下面…

Wordpress插件WP-Statistics无法识别来访IP国家和城市处理方法

Wordpress插件WP-Statistics&#xff0c;可以识别网站访问者的IP物理地址&#xff0c;统计出城市、国家&#xff0c;但最近发现都显示unknown/未知&#xff1a; 更新GeoIP数据库到最新还是不行&#xff1a; 偶然找到了之前能用的数据库&#xff0c;恢复回去&#xff0c;竟然大…

基于SpringBoot的桃花峪滑雪场租赁系统 JAVA简易版

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设计3.1 教练表3.2 教练聘请表3.3 押金规则表3.4 器材表3.5 滑雪场表3.7 售票表3.8 器材损坏表 四、系统展示五、核心代码5.1 查询教练5.2 教练聘请5.3 查询滑雪场5.4 滑雪场预定5.5 新…

【AI提示词人物篇】创新艺术未来,让科技改变想象空间

AI 绘画学习难度和练习技巧 学习绘画的技巧 学习能难度&#xff1a; 外貌特征&#xff1a;AI需要学习识别和理解各种外貌特征&#xff0c;如发型、肤色、眼睛颜色等。这可能需要大量的训练数据和复杂的模型架构。 镜头提示&#xff1a;AI需要学习理解不同镜头提示的含义&…

中心性算法归纳

中心性算法不仅是在我所学习的计算机网络当中起很重要的作用&#xff0c;在交通网络、社交网络、信息网络、神经网络当中也有很多的应用例子。今天我在这里总结一下场景的几种中心性算法。 参考文献 Python NetworkX库 偏心中心性&#xff08;Eccentricity Centrality&#x…

Kubernetes 的用法和解析(K8S 日志方案) -- 8

一、统一日志管理的整体方案 通过应用和系统日志可以了解Kubernetes集群内所发生的事情&#xff0c;对于调试问题和监视集群活动来说日志非常有用。对于大部分的应用来说&#xff0c;都会具有某种日志机制。因此&#xff0c;大多数容器引擎同样被设计成支持某种日志机制。 对…

安装vcpkg管理opencv的安装+MFC缺失的解决

第一步&#xff0c;出现#include没有办法找到opencv头文件的问题&#xff0c;无法解决 在VC的提示下&#xff0c;安装了vcpkg&#xff0c;然后用vcpkg命令来帮助安装opencv&#xff0c;过程十分顺利。 1. cmd 到命令行窗口&#xff1b; 2. 建立src文件夹&#xff0c;并进入…

KMP入门级别算法详解--终于解决了(next数组详解)

对于正常的字符串模式匹配&#xff0c;主串长度为m&#xff0c;子串为n&#xff0c;时间复杂度会到达O&#xff08;m*n&#xff09;&#xff0c;而如果用KMP算法&#xff0c;复杂度将会减少线型时间O&#xff08;mn&#xff09;。 设主串为ptr"ababaaababaa";&#…

MFC窗体背景颜色的设置、控件白色背景问题、控件文本显示重叠问题、被父窗体背景覆盖的问题

文章目录 设置mfc窗体背景颜色窗体设置背景颜色后解决控件白色背景解决重复修改控件文本后重叠的问题自绘控件被父窗体背景覆盖的问题 设置mfc窗体背景颜色 设置窗体的背景颜色非常简单&#xff0c;只需要在窗体的OnEraseBkgnd里面填充窗体背景就可以了&#xff0c;甚至直接画…