数组内元素如何排序? --《JAVA编程思想》 66

阿里云 Docker 镜像加速收费后:这些免费替代方案值得收藏 阿里云Docker镜像加速服务收费后,国内开发者急需免费替代方案。本文推荐2025年仍可用的7个免费镜像源,包括轩辕镜像、DaoCloud、网易云等,并提供多源配置方案以提高稳定性。建议开发者在CI/CD环境中配置多个镜像源,避免构建失败。文章还提供了详细的配置步骤和使用建议,适合个人和团队开发者参考。 阅读详情

在实际编码的过程中,经常需要对数组进行排序,下面一起和大家看看几种常见的排序场景。

1.根据数字大小升序

Arrays.sort() 默认根据数字大小进行升序。

public class SortArray {

    public static void main(String[] args) {
        Integer[] ints = {12, 94, 75, 24, 14, 17, 9, 64, 32, 21, 30, 54, 27};
        Arrays.sort(ints);
        System.out.println(Arrays.toString(ints));
      
    }

}
[9, 12, 14, 17, 21, 24, 27, 30, 32, 54, 64, 75, 94]

2.根据数字大小降序

Arrays.sort() 可以额外指定 JDK 原生的 Collections.reverseOrder() 为参数,来实现根据数字大小降序。

public class SortArray {

    public static void main(String[] args) {
        Integer[] ints = {12, 94, 75, 24, 14, 17, 9, 64, 32, 21, 30, 54, 27};
        Arrays.sort(ints, Collections.reverseOrder());
        System.out.println(Arrays.toString(ints));
    }

}
[94, 75, 64, 54, 32, 30, 27, 24, 21, 17, 14, 12, 9]

3.字符串排序

我们来看看使用 Arrays.sort() 对字符串进行排序会产生什么样的结果呢?

public class StringArraySort {

    public static void main(String[] args) {
        String[] strings = {"Banana", "apple", "Pear", "orange", "WaterMelon", "peach"};
        Arrays.sort(strings);
        System.out.println(Arrays.toString(strings));
    }

}

[Banana, Pear, WaterMelon, apple, orange, peach]

从打印结果可以发现,默认将首字母为大写的排列在前,小写在后,再依次根据字母的顺序进行升序。

不知道你是否会和我一样,对此种排序方式感到不自在,希望忽略大小写进行排序,可以在使用 Arrays.sort() 时额外指定 String.CASE_INSENSITIVE_ORDER 作为参数。

public class StringArraySort {

    public static void main(String[] args) {
        String[] strings = {"Banana", "apple", "Pear", "orange", "WaterMelon", "peach"};
        Arrays.sort(strings, String.CASE_INSENSITIVE_ORDER);
        System.out.println(Arrays.toString(strings));
    }

}
[apple, Banana, orange, peach, Pear, WaterMelon]

4.自定义排序

假设现在需要排序的元素不是基本类型,该如何处理呢?

只需该类型实现 Comparable 接口中的 compareTo(T t) 方法,定义该对象与传入对象两者之间比较方式:若传入对象比本对象大,则返回正值,传入对象比本对象小,则返回负值,两者相等则返回 0 。再通过 Arrays.sort() 方法则会将数组内元素根据升序进行排列。

public class Student implements Comparable<Student> {

    private int code;

    private int age;

    public Student(int code, int age) {
        this.code = code;
        this.age = age;
    }

    public int getCode() {
        return code;
    }

    public int getAge() {
        return age;
    }

    @Override
    public int compareTo(Student stu) {
        if (this.code > stu.getCode()) return 1;
        if (this.code < stu.getCode()) return -1;
        return 0;
    }

    @Override
    public String toString() {
        return "Student{" +
                "code=" + code +
                ", age=" + age +
                '}';
    }
    
}
public class StudentArraySort {

    public static void main(String[] args) {
        Student[] students =
                {new Student(1, 12), new Student(3, 9), new Student(2, 8), new Student(5, 10), new Student(4, 11)};
        Arrays.sort(students);
        System.out.println(Arrays.toString(students));
    }

}
[Student{code=1, age=12}, Student{code=2, age=8}, Student{code=3, age=9}, Student{code=4, age=11}, Student{code=5, age=10}]

5.覆盖已定义的排序

倘若我们需要进行排序的类型没有实现 Comparable 接口,或者你并不喜欢它的排序方式,这时又该如何操作呢?

我们还是来上述 Student 为例,Student 实现 Comparable 接口,默认根据 code 升序,现在想改为根据 age 进行升序。

可以通过实现 Comparator 接口中的 compare() 方法对元素进行排序, 实现方式与 Comparable 中的方式基本一致,第一个参数为对照元素,第二个参数为传入进行比较的元素。

public class StudentAgeComparable implements Comparator<Student> {

    @Override
    public int compare(Student s1, Student s2) {
        if (s1.getAge() > s2.getAge()) return 1;
        if (s1.getAge() < s2.getAge()) return -1;
        return 0;
    }
    
}
public class StudentArraySort {

    public static void main(String[] args) {
        Student[] students =
                {new Student(1, 12), new Student(3, 9), new Student(2, 8), new Student(5, 10), new Student(4, 11)};
        Arrays.sort(students, new StudentAgeComparator());
        System.out.println(Arrays.toString(students));
    }

}
[Student{code=2, age=8}, Student{code=3, age=9}, Student{code=5, age=10}, Student{code=4, age=11}, Student{code=1, age=12}]

本次分享至此结束,希望本文对你有所帮助,若能点亮下方的点赞按钮,在下感激不尽,谢谢您的【精神支持】。

若有任何疑问,也欢迎与我交流,若存在不足之处,也欢迎各位指正!

【小白深度教程 1.8】手把手教你使用 Depth Anything V2 估计单目深度,并映射到 3D 点云(含 Python 代码) 我们尝试使用单目深度估计技术(Depth Anything V2),来进行准确的双目深度估计,并将场景转换成 3D 点云,Python 代码在最后。 阅读详情

相关推荐

用Python玩转Iris数据集:从数据加载到可视化分析的完整指南

本文提供了使用Python处理Iris数据集的完整指南,涵盖数据加载、探索性分析、特征工程和可视化呈现等关键步骤。通过Pandas、NumPy、Matplotlib和Seaborn等工具,读者将学习如何从零开始完成一个机器学习项目的数据分析流程,掌握数据科学的核心技能。

j2k3l4的博客 850

数组的常用五种排序算法

数组的五种排序方法,选择法、冒泡法、交换法、插入法、折半法

Innocence网的博客 3万+

避坑指南:Python模拟抖音扫码登录时,那些你可能会遇到的‘Referer’和‘Token’校验问题

本文深入解析Python模拟抖音扫码登录时常见的Referer校验与Token失效问题,提供五大陷阱的解决方案。从动态fp参数生成到Referer校验策略,再到Token生命周期管理,手把手教你破解抖音登录接口的反爬机制,助力开发者高效完成自动化登录。

weixin_42573113的博客 781

java 元祖_在java中对元组列表进行排序的有效方法

给定的通用数据类型看起来像这样:HashMap< EdgeTuple,Double> edgeList其中tuple是一个EdgeTuple类,Double是一个对任务不重要的权重:class EdgeTuple{int label1;int label2;public EdgeTuple(int label1,int label2){int min = Math.min(label1...

weixin_42502382的博客 416

奇迹MU单机版开服全流程:从零搭建到分辨率调整(附GM工具使用技巧)

本文详细介绍了奇迹MU单机版从零搭建到分辨率调整的完整流程,包括环境配置、服务端启动、GM工具使用技巧等关键步骤。特别针对现代高分辨率显示器提供了优化方案,帮助玩家轻松搭建个性化游戏环境,重温经典MMORPG的独特魅力。

b3n4m5q6w7的博客 679

python怎样按某一列值拆分Excel表格

pd.ExcelWriter@python #用python按某一列拆分Excel工作表,将内容写入一个工作簿 本次以“按照表中的某一列,将一张表格拆分为多张表”的需求为例,简单介绍这个过程中用到的pd.ExcelWriter,及每一句的作用。 如上表《学生.xlsx》,假设有14万行28列,请按照学校名,拆分表格(不想用复制粘贴)。 ##代码及解释如下 import pandas as pd from time import time#用来计算时间,展示进度,减少焦虑 in_ws='学生.xlsx'#

learn_get的博客 6785

数组的五种排序方式

数组的五种排序方式 排序是对数组施加的最常用的算法,所谓排序,是指将数组元素按照从小到大或从大到小的顺序重新排列;那么对于元素较多的数组,排序算法的优劣至关重要; 一般情况下,通过排序过程中数组元素的交换次数来衡量排序算法的优劣; 而常用的排序算法有插入排序、冒泡排序、选择排序和java系统排序。 1.选择排序 选择排序的原理如下: • 将数组中每个元素与第一个元素比较,如果这个元素小于第一个...

Txmouse的博客 2万+

保姆级教程:在Ubuntu 20.04上从零搞定ROS Noetic和RealSense驱动,为无人机开发铺路

本文提供了一份详细的Ubuntu 20.04环境下ROS Noetic和RealSense驱动安装指南,专为无人机开发环境搭建设计。从系统配置、ROS安装到RealSense驱动集成,涵盖所有关键步骤和常见问题解决方案,帮助开发者快速搭建自主空中机器人开发平台。

weixin_30329623的博客 65

java 两个字段排序_在Java中使用Collections.sort 依据多个字段排序

一、如何使用Collections工具类进行排序使用Collections工具类进行排序主要有两种方式:1.对象实现Comparable接口,重写compareTo方法/*** @author Hanstrovsky*/@Data@AllArgsConstructorpublic class Student implements Comparable {String name;int age;@O...

weixin_34746715的博客 2711

iPad秒变Mac副屏的隐藏技巧:用BetterDisplay实现无线竖屏+90度锁定

本文详细介绍了如何利用BetterDisplay软件突破苹果原生“随航”(Sidecar)功能的限制,将iPad无线设置为Mac的竖屏副屏,并实现90度方向锁定。通过创建虚拟显示器、配置分辨率与旋转参数,并校准鼠标指针,用户可以高效利用iPad的纵向空间进行文档阅读、编码等工作,显著提升多屏协作效率。

weixin_29266647的博客 603

CVPR 2027 投稿规划:基于近3年录用率与截稿周期的5步时间管理法

本文为计算机视觉研究者提供CVPR 2027投稿的完整规划指南,基于近三年录用率与截稿周期数据,提出五步时间管理法。涵盖选题策略、实验设计、论文写作、同行评审到最终提交的全流程优化,特别针对CVPR日益激烈的竞争环境(2024年投稿量达11532篇,录取率仅23.6%)提供实用解决方案,帮助研究者提升投稿成功率。

weixin_34079177的博客 1152

数组排序的几种方式

1、sort排序 方法sort()将在原数组上对数组元素进行排序,即排序时不创建新的数组副本。如果调用方法sort()时没有使用参数,将按字母顺序(更为精确地说,是按照字符编码的顺序)对数组中的元素进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如果有必要的话),以便进行比较。 如果想按照别的顺序进行排序,就必须提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序...

HuaiCheng9067的博客 1万+

C++软件调试与异常排查从入门到精通专栏介绍与文章汇总

根据近几年排查软件异常的实践与经验,系统地讲解了C++软件异常常见原因与常用排查方法,以图文并茂的方式给出具体的分析实例,带领大家逐步掌握C++软件异常排查的相关技术与要领。

dvlinker的技术专栏 23万+

数组中的元素排序和去重总结

一、使用List来操作 public class ArraySort { public static void main(String[] args) { //定义一个数组 Integer [] str = {1,3,66,4,78,55,9,4,3,99}; //将数组转成集合 List list = Arrays.asList(str); //利用Collection

钟渊博客 4074

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

多维数组、数组的排序

多维数组、数组的排序 多维数组可以理解为由若干低维数组组成的数组,例如,多个一维数组可以组合而成为“二维数组”,多个二维数组组成三维数组… 二维数组的结构: s[i][j] j=0 j=1 j=2 i=0 67 89 53 i=1 77 98 68 i=2 57 66 73 i=3 80 88 94 i=4 84 92 90 多行多列、类型相同的数据组成的数据表  二维数组s的

fengdongkun的专栏 5208

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JAVA数组与排序(数组的排序)

排序 数据的学习就已经结束了,现在我们来学习对数据排序的算法 正式开始! 冒泡排序 现在我们给定一个无序的int的数组,如下 int arr[]={23,45,2,66,87,44}; 我们要求将上面数组的元素从小到大的升序排列,要求结果如下 {2,23,44,45,66,87} 那么我们要怎么实现呢?我们就来学习第一个算法-----冒泡排序法 实现思路 冒泡排序法的实现思路就是将两个元素进行比较,大的往后移一位,这样通过几轮比较,就可以实现对数组的排序了 画图分析 我们来简单画个图 第一轮

VisionLau的博客 3961

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java实现冒泡排序(详解)

深度解析冒泡排序算法 public class MySort{ public static void bubbleSort(int array[]){ for (int i = 0; i < array.length; i++) { for (int j = 0; j < array.length - 1 - i; j++) { if(array[j]>array[j+1]){

ChenSeventeen的博客 2万+

【java】数组排序并返回对应的索引值

在一些情况下,我们不仅需要排序,还需要直到排序之前该元素所在的位置,本篇博客就是在解决这个问题。 之前笔者尝试过使用HashMap记录的方式,感觉不如直接新建一个数组来的直接。 public class ArrayHelper { /** * 排序并返回对应原始数组的下标 * * @param arr * @param desc * @return */ publ...

XYZ 7232

Java 数组、排序和查找(2)

数组反转、数组排序和冒泡法复习

周小末天天开心的博客 733

新手入门Java数组排序及二维数组(有练习)

本文章介绍了数组排序的一些相关知识和二维数组的定义以及使用,希望能帮助正在入门Java的同学

2301_80477286的博客 1293

java数组合并排序_合并Java中的两个排序数组

可以合并两个排序的数组,以便获得单个结果排序的数组。一个例子如下。Array1=137910Array2=258Mergedarray=123578910演示该程序的程序如下。示例publicclassExample{publicstaticvoidmain(String[]args){int[]arr1={11,34,66,...

weixin_28730037的博客 1222

力扣【LeetCode】—— 26. 排序数组去重、66. 加一【java】

排序数组去重【双指针】 题目地址:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ 题目: 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例: 指定数组nums = [1,1,2] 返回2 nums 前两个元素被修改为 1,2 你不需要考虑数组中超..

眉头的骰 891

java一维数组排序_Java数组常用排序算法实例小结

本文实例讲述了Java数组常用排序算法。分享给大家供大家参考,具体如下:1、冒泡排序法SortArray_01.javapublic class SortArray_01 {public static void main(String args[]) {int[] array = { 14, 5, 86, 4, 12, 3, 21, 13, 11, 2, 55, 66, 22 };// 创建一个初...

weixin_35826166的博客 758

Java 的数组排序

本文介绍了 Java 中数组排序的相关内容。。。

Regino的博客 532

Java数组编程作业:1 使用Arrays中提供的排序算法,把数组降序输出。2 使用选择排序对数组进行降序排序。3 使用冒泡排序对数组进行降序排序。4 查找数组a中除0外的最小值和下标

Java数组编程作业: 1 使用Arrays中提供的排序算法,把数组降序输出。 代码: import java.util.Arrays; public class ArraysTest1 { public static void main(String[] args) { int a[]=new int[]{66,33,44,88,55}; System.o...

Frank_LLX的博客 2107

java简单二维数组的冒泡排序

运行结果为: 张三56李四66王五76赵六86田七96 田七96赵六86王五76李四66张三56 public class Demo02 { public static void main(String[] args) { // 1、定义一个二维数组String [][]student = new String[5][2]; // 二维数组内存放五个学生姓名和成绩,使用一种排序方式将数组根据...

Biubiubiu! 3527
上一篇: Arrays类的实用功能 --《JAVA编程思想》 65
下一篇: Collection 类的实用方法 --《JAVA编程思想》 67
BaymaxCS
博客等级 码龄9年 61粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BaymaxCS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值