使用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

结尾

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

LM1875官方电路图元件作用解释说明以及电路调校 R1是为C1提供充放电回路用的电阻,这是老外工作严谨的地方,其实接好电位器之后直流通路就已经存在了,这个加上只能防止最恶劣情况时也能把C1的电能放掉,尽管只有一点点 C1是输入电容,主要作用是隔离前后级的直流信号,但是这个电容对音质的影响很大,可以换用不同的品牌和容量来部分修改音质和音色 R2提供LM1875正输入端的直流电平控制点,接地就表示在理想情况下Lm1875的输出直流电平是0V;还有一个作用就是确定放大器的交流输入阻抗为电阻值。 R3、R4是反馈电阻,这个电路的放大倍数为R4/R3+1=21倍。. 阅读详情

相关推荐

miRNA测序数据生信分析——第一讲,总结概述

这里的miRNA测序指转录水平的测序。这里每一个数据库都可以在线访问,但是如果要本地使用,都需要进行数据库文件下载,整理。

weixin_44616693的博客 4951

使用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

kmeans聚类分析结果怎么看_【Stata与机器学习】物以类聚-KMeans算法应用案例介绍...

古语有云:物以类聚,人以群分。KMeans是无监督机器学习中的聚类算法中最简单的一种——基于特征对样本进行归为不同的类,很好地阐述了‘物以类聚’这句话的精髓。机器学习又叫统计学习。既然都统计了,所以当然包括了计量经济学。所以一般来说,机器学习的算法类型远多于计量经济学。比如线性回归,这个算是机器学习算法中比较基础的部分。当然,计量经济学在回归分析、因果推断方面的造诣,也是普通机器学算法所不能比的。...

weixin_39857480的博客 1万+

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

2.数字芯片时序正确的前提—Max-transition

芯片物理设计中最基本的Max-transition检查

weixin_43868998的博客 5425

DRM驱动代码分析:展频 跳频

DRM驱动代码分析:展频 跳频

yuuu_cheer的博客 2676

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

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

Forlogenの解忧杂货铺 8449

RK3588 Android12 添加HDMI和喇叭声音通道切换选项

rk3588 android12系统默认接hdmi out时,声音会切换到hdmi out输出,主板声卡喇叭输出会没有声音输出。现在添加一个选项设置hdmi out时,声音可以保持主板声卡喇叭输出。

Android系统开发笔记 4163

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

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

WitsMakeMen的专栏 5566

STM32 使用IQmath实现SVPWM

文章目录SVPWMIQMATHIQmathLib测试部分程序附件 SVPWM SVPWM是空间矢量脉宽调制(Space Vector Pulse Width Modulation)的简称,通常由三相逆变器的六个功率开关管组成,经过特定的时序和换相所所产生的脉冲宽度调制波,最终输出的波形可能会十分接近理想的正弦波形。 具体如下图所示;左侧为复平面,即空间矢量,右侧为时域的正弦波形; 关于SVPWM原理的文章非常多,这里可以推荐一下网上一个非常不错的教程《SVPWM的原理及法则推导和控制算法详解第五修改版》,

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 2万+

WPF vs Avalonia: 跨入C#桌面应用现代化的大门

请注意,这只是一个目录,详细内容将根据这个结构逐步展开。如果您需要某个特定部分的详细内容,请告知我,我将为您提供深入的解析和示例代码。WPF,全称Windows Presentation Foundation,是微软为Windows平台量身打造的UI框架。自2006年发布以来,它就像一位经验丰富的老船长,引领着桌面应用的航船在技术的海洋中乘风破浪。Avalonia,一个新兴的跨平台UI框架,它像一位年轻的探险家,勇敢地探索着桌面应用的新世界。

java专栏 2398

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

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

英俊帅比林的博客 2万+

MOSFET关断尖峰电压的机理与抑制

MOSFET在电力电子系统中存在开关尖峰电压/电流问题,主要源于寄生电感、密勒电容及开关瞬态特性。尖峰会引发过压击穿、功率损耗和EMI干扰。抑制措施包括优化驱动电路、添加缓冲网络(RC/RCD)、降低寄生电感(改进PCB布线/封装)、使用快速二极管及远端负载特殊处理(电抗器/滤波器)。系统性的器件选型与电路设计是确保功率电子稳定运行的关键。

硬核科技 1824

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

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

qrsmez_284的博客 262

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Camera2Demo

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

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

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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、付费专栏及课程。

余额充值