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

news2025/1/18 5:42:01

目录

一、升序

二、降序

(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);
        }
    }

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA——IDEA中文件内容对比功能的使用,如何快速定位看文件内容是否产生变化!!!

文件内容对比 一、对比磁盘中的某一文件二、直接对比两个文件 总结 本篇文章介绍一下如何在IDEA中对比两个文件的内容是否相同。 一、对比磁盘中的某一文件 选中一个文件&#xff0c;右键->点击Compare With 选择要对比的文件即可 二、直接对比两个文件 同时选中两个文…

基于协同过滤的电影评论数据分析与推荐系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目介绍 随着社会的发展&#xff0c;人们生活水平的提高&#xff0c;欣赏电影逐渐成为人们闲暇时的主要娱乐方式之一。本文电影推荐系统是为了给顾客提供方便快捷的热门电影推荐以及查询电影资讯而建立的&…

C# 跨越配置

跨越配置1 项目框架 .NET Framework 1.web.config配置 在system.webServer节点中添httpProtocol子节点 Access-Control-Allow-Origin值为“*”” <httpProtocol><customHeaders><add name"Access-Control-Allow-Origin" value"*" /><…

redis 从0到1完整学习 (六):Hash 表数据结构

文章目录 1. 引言2. redis 源码下载3. dict 数据结构4. 哈希表扩容与 rehash5. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&#xff09;&#xff1a;red…

MATLAB - 估计滤波器(Estimation Filters)

系列文章目录 前言 本篇文章翻译自官网&#xff0c;部分下标有问题&#xff0c;请自行分辨。 一、背景介绍 1.1 估算系统 对于许多自主系统&#xff08;autonomous systems&#xff09;来说&#xff0c;了解系统状态&#xff08;system state&#xff09;是设计任何应用的先决…

Linux命令-查看内存、GC情况及jmap 用法

查看进程占用内存、CPU使用情况 1、查看进程 #jps 查看所有java进程 #top 查看cpu占用高进程 输入m &#xff1a;根据内存排序 topMem: 16333644k total, 9472968k used, 6860676k free, 165616k buffers Swap: 0k total, 0k used, 0k free, 6…

【网络编程】网络通信基础——简述TCP/IP协议

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一、ip地…

全网最全ChatGPT指令大全prompt

全网最全的ChatGPT大全提示词&#xff0c;大家可以进行下载。 AIGC ChatGPT 职场案例 AI 绘画 与 短视频制作 PowerBI 商业智能 68集 数据库Mysql 8.0 54集 数据库Oracle 21C 142集 Office 2021实战应用 Python 数据分析实战&#xff0c; ETL Informatica 数据仓库案例实战 E…

The Cherno C++笔记02

目录 Part 06 How the C Compiler Works 1.编译过程 2.C并不关心文件 3.翻译单元&#xff08;Translation Unit&#xff09; 4. 实际用代码感受一下编译过程 4.1 预处理 4.1.1 预处理的本质 4.1.2 预处理后的.i文件 4.1.3 骚操作 4.2 .asm文件&#xff08;汇编语言源文…

手把手教你在飞书中搭建机器人

前言 大家好&#xff0c;我是潇潇雨声。飞书是一款在国内广受欢迎的企业内部管理和协同工具&#xff0c;同时也可以作为一个强大的个人知识管理工具。在本文中&#xff0c;我将帮助你迅速创建一个飞书对话机器人&#xff0c;并嵌入 chatGPT 的功能。这个机器人可以直接回答你的…

贪吃蛇(七)方向和屏幕刷新

由于用户玩游戏的时候&#xff0c;程序需要一边接收用户的输入&#xff0c;一边需要刷新屏幕&#xff0c;此时就需要引用线程来解决此问题。 实现思路 linux线程库pthread&#xff0c;只需要创建pthread_t 类型的线程变量&#xff0c;然后将线程变量与函数进行绑定即可&#…

HFish蜜罐搭建及简单使用

一、HFish蜜罐 HFish是一款社区型免费蜜罐&#xff0c;侧重企业安全场景&#xff0c;从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发&#xff0c;为用户提供可独立操作且实用的功能&#xff0c;通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的…

一篇文章带你搞定CTFMice基本操作

CTF比赛是在最短时间内拿到最多的flag&#xff0c;mice必须要有人做&#xff0c;或者一支战队必须留出一块时间专门写一些mice&#xff0c;web&#xff0c;pwn最后的一两道基本都会有难度&#xff0c;这时候就看mice的解题速度了&#xff01; 说实话&#xff0c;这是很大一块&…

JavaEE进阶学习:Spring MVC 程序开发

1.什么是 Spring MVC Spring Web MVC 是基于Servlet API 构建的原始 Web 框架&#xff0c;从一开始就包含在Spring 框架中。它的正式名称 “Spring Web MVC” 来自其源模块的名称(Spring-webmvc)&#xff0c;但它通常被称为“Spring MVC”。 从上述定义我们可以得出两个关键信…

blender径向渐变材质-着色编辑器

要点&#xff1a; 1、用纹理坐标中的物体输出连接映射中的矢量输入 2、物体选择一个空坐标&#xff0c;将空坐标延z轴上移一段距离 3、空坐标的大小要缩放到和要添加材质的物体大小保持一致

【雷达原理】雷达测速原理及实现方法

一、雷达测速原理 1.1 多普勒频率 当目标和雷达之间存在相对运动时&#xff0c;若雷达发射信号的工作频率为&#xff0c;则接收信号的频率为&#xff0c;其中为多普勒频率。将这种由于目标相对于辐射源运动而导致回波信号的频率发生变化的现象称为多普勒效应。 如图1-1所示&a…

猫头虎博客:SSH连接失败ssh: connect to host port 22: Connection refused”解决大揭秘

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Linux bridge开启hairpin模拟测试macvlan vepa模式

看到网上介绍可以通过Linux bridge 开启hairpin方式测试macvlan vepa模式&#xff0c;但是没有找到详细资料。我尝试测试总提示错误信息&#xff0c;无法实现&#xff0c;经过几天的研究&#xff0c;我总算实现模拟测试&#xff0c;记录如下&#xff1a; 参考 1.Linux Macvla…

Angular 11到升级到 Angular 16

日新月异&#xff0c;与时俱进… 随着Angular版本不断更新&#xff0c;再看所开发的项目版本仍然是Angular 11&#xff0c;于是准备升级 截止发博日最版本是 v17.1.0&#xff0c;考虑到稳定性因素决定升级到v16版本 一&#xff1a;查看 升级指南 二&#xff1a;按照指南&…

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

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 cal命令在Ubuntu系统下用于显示日历。它可以显示任何特定月份或整个年份的日历。 cal命令的参数如下 -1&#xff1a;只显示当前月份的日历。-3&#xff1a;显示前一个月、当前月和下一个月的日历。-s&#xff1a;指定日历的开始…