使用Arrays.sort()对对象数组进行排序

java 中 自定义对象数组排序 Arrays.sort()方法 以及 Compareable接口和Compartor接口对比分析 java 中 自定义对象数组排序 Arrays.sort()方法 以及 Compareable接口和Compartor接口对比分析 对自定义对象数组排序,需要引入“比较器”,的概念。 Compareable和Compartor接口就是比较器抽象接口,通过实现类,重写接口方法来进行对象比较。 Arrays.sort()有2个重载方法,见下 sort(Objetc[] a) ... 阅读详情

概述

使用java.util.Arrays中的sort()方法,对对象数组进行排序,按照属性。

代码

package com.demo;

import java.util.Arrays;
import java.util.Comparator;

class Student{
	//为了方便,不进行封装
	int id;
	int age;
	String name;
		
	Student(int id,int age,String name){
		this.id=id;
		this.age=age;
		this.name=name;
	}

	public String toString() {
		System.out.println("Student's id = "+this.id+" ,age = "+this.age+" ,name = "+this.name);
		return null;
	}
}

public class Main {
	
	public static void main(String[] args) {
		
		//随便给点数据
		Student[] stu = new Student[6];
		stu[0] = new Student(1,25,"Mary");
		stu[1] = new Student(3,22,"Peter");
		stu[2] = new Student(6,18,"Jack");
		stu[3] = new Student(2,36,"James");
		stu[4] = new Student(9,22,"Wade");
		stu[5] = new Student(5,15,"Anna");
		
		System.out.println("原始数据:");
		for(int i=0;i<stu.length;i++) {
			stu[i].toString();
		}
		System.out.println();
		
		Arrays.sort(stu, new MyComparator(1));
		System.out.println("按id升序:");
		for(int i=0;i<stu.length;i++) {
			stu[i].toString();
		}
		System.out.println();
		
		Arrays.sort(stu, new MyComparator(2));
		System.out.println("按id降序:");
		for(int i=0;i<stu.length;i++) {
			stu[i].toString();
		}
		System.out.println();
		
		Arrays.sort(stu, new MyComparator(3));
		System.out.println("按age升序:");
		for(int i=0;i<stu.length;i++) {
			stu[i].toString();
		}
		System.out.println();
		
		Arrays.sort(stu, new MyComparator(4));
		System.out.println("按age降序:");
		for(int i=0;i<stu.length;i++) {
			stu[i].toString();
		}
		System.out.println();
		
		Arrays.sort(stu, new MyComparator(5));
		System.out.println("按name升序:");
		for(int i=0;i<stu.length;i++) {
			stu[i].toString();
		}
		System.out.println();
		
		Arrays.sort(stu, new MyComparator(6));
		System.out.println("按name降序:");
		for(int i=0;i<stu.length;i++) {
			stu[i].toString();
		}
	}
}

class MyComparator implements Comparator<Student> {
	//用以判断以什么形式排序,通过构造函数传参
	int flag;
	
	@Override
	public int compare(Student o1, Student o2) {
		switch(flag) {
			//1为:按id排序,升序
			case 1:{
				if(o1.id>o2.id)
					return 1;
				else if(o1.id<o2.id)
					return -1;
				else
					return 0;
			}
			//2为:按id排序,降序
			case 2:{
				if(o1.id>o2.id)
					return -1;
				else if(o1.id<o2.id)
					return 1;
				else
					return 0;
			}
			//3为:按age排序,升序
			case 3:{
				if(o1.age>o2.age)
					return 1;
				else if(o1.age<o2.age)
					return -1;
				else
					return 0;
			}
			//4为:按age排序,降序
			case 4:{
				if(o1.age>o2.age)
					return -1;
				else if(o1.age<o2.age)
					return 1;
				else
					return 0;
			}
			//5为:按name排序,升序
			case 5:{
				if(o1.name.compareTo(o2.name)>0)
					return 1;
				else if(o1.name.compareTo(o2.name)<0)
					return -1;
				else
					return 0;
			}
			//6为:按name排序,降序
			case 6:{
				if(o1.name.compareTo(o2.name)>0)
					return -1;
				else if(o1.name.compareTo(o2.name)<0)
					return 1;
				else
					return 0;
			}
			//默认为id升序
			default:{
				if(o1.id>o2.id)
					return 1;
				else if(o1.id<o2.id)
					return -1;
				else
					return 0;
			}
		}
		
	}
	
	MyComparator(int flag){
		this.flag=flag;
	}
}

运行结果如下:

原始数据:
Student's id = 1 ,age = 25 ,name = Mary
Student's id = 3 ,age = 22 ,name = Peter
Student's id = 6 ,age = 18 ,name = Jack
Student's id = 2 ,age = 36 ,name = James
Student's id = 9 ,age = 22 ,name = Wade
Student's id = 5 ,age = 15 ,name = Anna

按id升序:
Student's id = 1 ,age = 25 ,name = Mary
Student's id = 2 ,age = 36 ,name = James
Student's id = 3 ,age = 22 ,name = Peter
Student's id = 5 ,age = 15 ,name = Anna
Student's id = 6 ,age = 18 ,name = Jack
Student's id = 9 ,age = 22 ,name = Wade

按id降序:
Student's id = 9 ,age = 22 ,name = Wade
Student's id = 6 ,age = 18 ,name = Jack
Student's id = 5 ,age = 15 ,name = Anna
Student's id = 3 ,age = 22 ,name = Peter
Student's id = 2 ,age = 36 ,name = James
Student's id = 1 ,age = 25 ,name = Mary

按age升序:
Student's id = 5 ,age = 15 ,name = Anna
Student's id = 6 ,age = 18 ,name = Jack
Student's id = 9 ,age = 22 ,name = Wade
Student's id = 3 ,age = 22 ,name = Peter
Student's id = 1 ,age = 25 ,name = Mary
Student's id = 2 ,age = 36 ,name = James

按age降序:
Student's id = 2 ,age = 36 ,name = James
Student's id = 1 ,age = 25 ,name = Mary
Student's id = 9 ,age = 22 ,name = Wade
Student's id = 3 ,age = 22 ,name = Peter
Student's id = 6 ,age = 18 ,name = Jack
Student's id = 5 ,age = 15 ,name = Anna

按name升序:
Student's id = 5 ,age = 15 ,name = Anna
Student's id = 6 ,age = 18 ,name = Jack
Student's id = 2 ,age = 36 ,name = James
Student's id = 1 ,age = 25 ,name = Mary
Student's id = 3 ,age = 22 ,name = Peter
Student's id = 9 ,age = 22 ,name = Wade

按name降序:
Student's id = 9 ,age = 22 ,name = Wade
Student's id = 3 ,age = 22 ,name = Peter
Student's id = 1 ,age = 25 ,name = Mary
Student's id = 2 ,age = 36 ,name = James
Student's id = 6 ,age = 18 ,name = Jack
Student's id = 5 ,age = 15 ,name = Anna

结尾

好好学习,天天向上~
欢迎关注一波,我的公众号【啦啦啦啊摘月亮】,不定时分享所学,欢迎交流。
在这里插入图片描述

STM32驱动GP2Y1010AU0F红外PM2.5传感器:从采样时序到浓度标定 在嵌入式环境监测项目中,模拟传感器输出信号的准确采集是系统可靠性的基石。许多工程师在接触红外散射式粉尘传感器时,常因不了解其特殊的脉冲驱动与采样保持机制,导致ADC读数异常。红外散射原理通过检测颗粒物散射光强来估算粉尘浓度,其输出信号并非稳定直流,而是与LED脉冲同步的短时窗口电压。理解这一时序特征,并掌握在STM32平台上通过定时器与ADC协同完成微秒级精准采样的方法,是获取有效数据的关键。该技术广泛应用于室内空气质量检测、空气净化器控制及DIY环境监测节点等场景。本文以GP2Y1010AU0F为例,详细 阅读详情

相关推荐

WIFI中CSI的读取

学习目标: 目前正在做基于WIFI的无设备定位,准备使用信道状态信息(CSI),学习一下。 目前采集数据环境已经搭建好,准备研究信号的预处理。 学习内容: 1、 信号的读取——read_bf_file函数的研究 2、 3、 4、 1. read_bf_file详解: %READ_BF_FILE Reads in a file of beamforming feedback logs. % This version uses the *C* version of read_bfee, ...

sz3076799的博客 8892

使用Arrays.sort方法对对象排序

Arrays.sort()方法对引用类型(对象)排序有两种方法: 继承Comparable接口并实现compareTo方法 import java.util.Arrays; public class Test { public static void main(String[] args) { Man[] msMans = { new Man(3, "a"), new Man(60, "b"), new Man(2, "c") }; Arrays.sort(msM.

qq_42026590的博客 2087

ParallelsDesktop 安装 CentOS-6.9-x86_64-minimal 教程

安装参考 tools没做 想安装的可以参考这个 mac 本机环境: 系统:macOS Catalina version 10.15.6 虚拟机软件:parallels Desktop 15 for Mac( Parallels Desktop-15.1.4(47270)) Centos镜像: CentOS-6.9-x86_64-minimal.iso https://mirrors.aliyun.com/centos-vault/6.8/isos/x86_64/ http://vault.centos.

爱吃鱼的小明的博客 955

java数组排序Arrays.sort()

1、Arrays.sort(int[] a) 这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序。 举例如下 import java.util.Arrays; public class Main { public static void main(String[] args) { int[] a = {9, 8, 7, 2, 3, 4, 1...

zhjtzwx的博客 1916

如何用Megatron-LM搭建多卡集群?手把手教你配置分布式训练环境

本文提供了一份详细的Megatron-LM多卡集群搭建实战指南。从硬件兼容性检查、软件栈版本对齐,到分布式并行策略(数据并行、张量并行、流水线并行)的配置与多节点启动脚本编写,手把手教你配置稳定高效的分布式训练环境,并分享了关键的排错与性能调优经验。

yellow的专栏 413

从零到一:Abaqus与Matlab联合仿真的自动化流程构建指南

本文详细介绍了如何构建Abaqus与Matlab联合仿真的自动化流程,涵盖基础架构设计、关键接口技术实现、结果提取与处理技术以及高级参数化优化流程。通过Python脚本作为桥梁,实现数据传递和任务控制,帮助工程师提升仿真效率。特别强调了版本兼容性、异常处理和性能监控等实用技巧。

weixin_29090089的博客 612

如何使用Arrays.sort()对任意类型的数据进行排序?

前段时间看到一篇关于Arrays.sort()基本原理和使用的解读,正好之前自己也想总结一下关于Java中和排序相关的一些内容,不限于Arrays.sort()、ArrayList.sort()以及Comparator和Comparable接口。在本文中将介绍Arrays中各种重载的sort(),以及解释如何使用Arrays.sort()对任意类型的数据进行排序,这其中又涉及到Comparable接口和Comparator类的相关内容,最后在对比看一下ArrayList中的sort()。 文章目录1. .

Forlogenの解忧杂货铺 8449

手把手教你学PCIE(11.3)--pcie的认证和合规性测试

PCIe 设备的认证和合规性测试是确保设备正常工作和达到预期性能的关键步骤。通过使用 PCI-SIG 提供的测试工具和第三方测试工具,可以全面评估 PCIe 设备的物理层、链路层、事务层和互操作性,确保设备符合行业标准和规范。

MHD0815的博客 1360

如何使用Arrays.sort()对自己定义的类进行排序

首先你要定义自己的类,该类必须继承自Comparable抽闲接口,因为调用sort排序的对象必须是可以比较的,通过重载Comparable接口的compareTo函数定义自己的比较规则,下面是我定义的一个表示图中边的类,他有i代表边的起始节点,j代表边的终止节点,w代表边的权重,然后定义compareTo函数,使边按照权重w进行升序排序: public class Edge implemen

WitsMakeMen的专栏 5566

芯片测试:WAT、CP、FT

最近部门来了一个日本回来的同事,虽然他尽量用非常Poor的中文给我解释一些东西,其中还夹杂着一些英文让我很受挫,于是最近来学一下WAT中的常用的单词含义。直接去查缩写、查单词很难去记住,要把具体的东西放在具体的场景,引发知识的连接才会在脑子里留下一定的映像。感兴趣的一起来学习一下这篇不错的文章吧。注释是我查询记录,如有不妥,欢迎指出修正。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 5084

【RBF预测】基于粒子群算法优化RBF神经网络实现数据回归预测含Matlab源码

1 简介 原油含水率预测对于确定油井水,油层位以及估计原油产量有着非常重要意义.BP神经网络是最近常用的原油含水率预测方法,然而,由于BP神经网络存在容易陷入局部极小值,收敛速度慢等问题,影响了其预测的实用性和准确性,对此,提出基于粒子群优化RBF神经网络(PSO-RBFNN)的原油含水率预测方法,粒子群优化算法用于RBF神经网络参数优化.在分析原油含水率预测的影响因素基础上,建立粒子群优化RBF神经网络的原油含水率预测模型.实验结果表明,在原油含水率预测中,基于粒子群优化RBF神经网络比BP神经网络有着

qq_59747472的博客 1232

Java使用Arrays.sort()方法给对象排序

当我们给一个整型数组或者浮点型之类的数组排序的时候,很简单就可以达到我们排序的目的,无非是排序算法的问题。那么,如果我们现在想根据对象的一个属性值给一个对象数组进行排序呢? 假如我们现在有一个Car类型,Car类中有一个double型的speed属性用来描述车辆的速度,现在我们想根据车速来对一个Car数组中的车辆进行排序,怎么做呢? public class Car{ private doubl...

英俊帅比林的博客 2万+

ISP 芯片作为独立设备节点的驱动实现要点:多平台结构差异与工程部署策略解析

随着 ISP(Image Signal Processor)从 SoC 集成形态向独立芯片模块演进,在多摄系统、高动态场景、AI 图像前处理等需求下,ISP 作为单独设备节点进行驱动设计已成为主流趋势。尤其在多 SoC 平台(如高通、联发科、展锐、Rockchip)中,不同厂商对 ISP 的抽象方式与驱动接口处理存在显著差异。本文以实际工程为基础,从 Linux 内核下的设备注册流程、media\_entity 配置、VideoDevice 分配、数据 DMA 管理、与 sensor 的流同步控制等关键点展

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1462

为什么Arrays.sort()对对象数组排序有时不稳定?

如果两个对象在比较时被判定为“相等”(compareTo或compare返回0),但实际业务逻辑中它们的属性不完全相同,排序结果可能因算法实现差异而变得不稳定。虽然TimSort是稳定的,但在某些情况下,比如数组长度较小时,可能转为插入排序或其他优化策略,导致稳定性无法保证。在Java编程中,Arrays.sort()是常用的排序方法,但对于对象数组,它有时会出现不稳定的排序结果。尽管Arrays.sort()本身是单线程操作,但若在排序过程中对象的关键字段被其他线程修改,可能导致比较结果不一致。

qrsmez_284的博客 262

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

37-Arrays.sort() 由大到小排序 和 对象数组排序

1. 由大到小排序; 2. 对象数组排序; 1. 由大到小排序; 注意:必需是Integer 类型的数组!!! 方法一: import java.util.Arrays; import java.util.Comparator; public class Main1 { public static void main(String[] args) { Inte...

ystraw - Come on!!! 653

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Arrays类的sort()方法实现Comparable接口对象数组排序

     Arrays类中的sort方法承诺可以对对象数组进行排序,但要求满足下列前提:对象所属的类必须实现了Comparable接口。下面是Comparable接口的代码: //Java SE 5.0之前: public interface Comaprable { public int comparableTo(Object other); } //Java SE 5.0中,Compar...

m0_37732829的博客 1981

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java对象排序

我们如何对一组对象进行排序. 如果我们需要对一个对象数组进行排序,我们可以使用Arrays.sort()方法。如果我们需要排序一个对象列表,我们可以使用Collections.sort()方法。 public static void main(String[] arg0) { List<String> list = new ArrayList<...

weixin_30364147的博客 82

48- java Arrays.sort和collections.sort()再次总结

今天又碰到一个新BUG,记下来。 一直报空指针异常,我就很奇怪了,怎么就空指针了呢,我输出时,也能输出东西呀。 原来Arrays.sort() 和 Collections.sort() 都是对整个数组或者链表进行排序的,也就是整个数组或者链表有多长就会进行多长的排序。 而我new的数组时30,而真正new的对象只有20个,故后10个对象没有实例化,而排序比较时有用到,故会报空指针异...

ystraw - Come on!!! 319

Java的Arrays.sort():排序算法与优化分析

Java的Arrays.sort()方法根据数据类型采用不同算法:基本类型使用双轴快速排序,通过三向切分、插入排序优化小数组等策略提升效率;对象数组则采用TimSort算法,利用自然有序片段和归并排序实现稳定高效排序。两种算法均针对不同场景优化,确保在各类数据上都能达到最佳性能。

qq_43947876的博客 1173

Arrays.sort()方法在Java中的使用:理论与实践

这篇文章概述了 Java 中 Arrays.sort() 方法的使用,包括对基本数据类型和对象数组的排序方法,以及进阶技巧如自定义比较、逆序排序、和 lambda 表达式

a1806542392的博客 2166

java arrays 比较器,Java 用Arrays.sort()对对象数组排序之comparable接口和comparator比较器...

Comparable接口 import java.util.Arrays;public class LocalTest{public static void main(String[] args){Student[] sa = {new Student("z1", 17, 99), new Student("z2", 19, 98),new Student("z3", 20, 100), new ...

weixin_42516642的博客 425

【Java知识】Java基础-对象排序的实现

方法,并且需要提供一个比较器(Comparator)来定义对象的排序逻辑。这些示例展示了如何在Java中对对象进行排序,无论是使用列表还是数组,都可以灵活地使用比较器来定义排序规则。在Java中,对象的排序通常涉及到使用。

wendao76的专栏 1357

【有料】java中排序函数sort()使用,Arrays.sort()和Collections.sort()

Java中常用的数组或集合排序的方法有两个,一个是java.util.Arrays中的静态方法Arrays.sort(),还有一个是java.util.Collections中的静态方法的Collections.sort()方法,下面分别介绍两种用法。一.java.util.Arrays中的静态方法Arrays中的sort()方法主要是针对各种数据类型(基本数据类型和引用对象类型)的数组元素排序。.......

daobuxinzi的博客 871
上一篇: 算法复杂度
下一篇: Redis整合spring版本问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值