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

结尾

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

docker安装fastdfs+nginx配置 docker安装fastdfs+nginx,实现图片或文件的上传与下载 阅读详情

相关推荐

STM32CubeMX+Keil5实战:手把手教你用STM32F103C8T6开发扫地机器人(附完整代码)

本文详细介绍了如何使用STM32F103C8T6开发智能扫地机器人,从STM32CubeMX配置到Keil5代码实现的全过程。涵盖硬件选型、时钟树配置、GPIO外设设置、电机驱动、超声波测距及自动避障算法等核心内容,并提供完整代码示例,助力开发者快速掌握智能硬件开发技巧。

weixin_30329623的博客 81

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

Cadence仿真笔记(二):传统noise仿真—共源极的噪声

cadence中进行传统噪声仿真

Bao_xue的博客 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

实战指南:用Python实现ONVIF WS-Discovery设备发现(附完整代码)

本文提供了一份详细的实战指南,介绍如何使用Python实现基于ONVIF标准的WS-Discovery设备发现协议。文章深入解析了协议原理、网络通信模型,并提供了完整的代码实现,帮助开发者快速构建智能安防和物联网应用中的设备自动发现工具,有效提升网络设备集成与管理的效率。

chair的专栏 1113

DINOv2 基于自定义数据集进行图片分类预测

(前提是安装好pytorch)1. pip安装2. 下载dinov2提供的预训练模型,需要自行前往网站上查找dinov2模型进行下载。模型需要下载三个文件:下载完成后将上述三个文件放置在本地一个名为dinov2_base的文件夹中即可。

sinat_34770838的博客 6665

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

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

Forlogenの解忧杂货铺 8449

STM32+4G模块+MQTT协议:从零构建稳定可靠的物联网通讯链路

本文详细介绍了如何利用STM32、4G模块和MQTT协议构建稳定可靠的物联网通讯链路。通过硬件选型、AT指令配置和MQTT连接实战,帮助开发者实现低功耗、高可靠性的数据传输,特别适合户外和移动场景应用。

weixin_29191081的博客 334

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

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

WitsMakeMen的专栏 5566

L3自动驾驶时代,域控制器核心解析(第一篇:架构演进与五域基础)

本文作为L3域控制器系列的第一篇,核心梳理了3个关键内容:L3时代为什么必须用域控制器:解决分布式ECU的协同、算力、迭代难题;域控制器的演进路线:从分布式ECU→域集中式→中央计算平台;博世五域架构的核心解析:五大域的定位、功能与典型方案。后续将持续更新系列文章,重点覆盖:第二篇:L3对域控制器的关键技术要求(传感器、算力、线控、软件、通信);第三篇:域控制器全产业链拆解(上游芯片、中游器件、下游总成);第四篇:域控制器的产业机遇与国产替代进展。

getusushu的博客 539

地平线J6的基础简介

地平线J6M芯片:面向中阶辅助驾驶市场的高性价比芯片

weixin_43084908的博客 4453

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

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

英俊帅比林的博客 2万+

LearningToRank(LTR)排序算法LGBMRanker的原理和使用

1. 写在前面 在最近新闻推荐的比赛中, 接触到了一个排序模型LGBMRanker, 该模型与普通的分类模型LGBMClassifier不太一样, 普通的分类模型在进行推荐的时候, 往往是先预测某个商品或者文章用户会不会点击, 也就是它的目标是预测用户点击某篇文章或者某个商品的概率, 然后根据这个概率值进行排序, 排完之后,把最靠前的几个返回回来给用户进行推荐。 而LGBRanker模型, 它不关心用户点击某篇文章的概率, 而是根据用户点击或者不点击的这个行为, 直接去预测最后商品或者文章的一个相对顺序,

Miracle8070 1万+

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

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

qrsmez_284的博客 262

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

Camera2Demo

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

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

余额充值