使用Comparable、Comparator接口实现对对象数组、List集合自定义排序
1、实现对象数组排序
(1)方法一,需要排序的对象所属的类实现Comparable接口,复写 comparaTo方法
(2)方法二,需要排序的对象所属的类已经完成无法实现Comparable接口,这种情况用实现Comparator接口,需要自定义排序规则类 复写compare方法
2、实现List集合排序,和对象数组是一样的规则,只是最终排序调用的工具类是Collections.sort()方法
直接看代码:
方法一:学生Student类
<span style="font-size:14px;"><span style="font-size:18px;">package cn.com.lcx.model;public class Student implements Comparable<Student>{private String name;private int age;private double score;public String getName() {return name;}public Student(String name, int age, double score) {super();this.name = name;this.age = age;this.score = score;}public void setName(String name) {this.name = name;}public int getAge() {return age;}/*** 重写toString()方法,方便打印对象信息*/@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", score=" + score+ "]";}public void setAge(int age) {this.age = age;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}/*** 实现Comparable的compareTo 方法* 1表示大于,-1表示小于,0表示等于* 如果if条件和返回值表示一样(即if表达式是大于 返回值且是1)那么就是升序,反之则是降序*/@Overridepublic int compareTo(Student o) {/*** 按年龄降序(if条件和返回值相反) 年龄相同 按成绩升序(if条件和返回值相同)*/if(this.age> o.age){return -1;}else if(this.age< o.age){return 1;}else{if(this.score> o.score){return 1;}else if(this.score< o.score){return -1;}else{return 0;}}}
}
</span></span>
方法二:学生排序规则类StudentComparator,方法二适用与早已开发好的类,但是却没有实现Comparable接口
<span style="font-size:14px;"><span style="font-size:18px;">package cn.com.lcx.model;import java.util.Comparator;public class StudentComparator implements Comparator<Student>{/*** 实现Comparator的compare 方法* 1表示大于,-1表示小于,0表示等于* 如果if条件和返回值表示一样(即if表达式是大于 返回值且是1)那么就是升序,反之则是降序*/@Overridepublic int compare(Student o1, Student o2) {/*** 按年龄升序(if条件和返回值相同) 年龄相同 按成绩降序(if条件和返回值相反)*/if(o1.getAge()> o1.getAge()){return 1;}else if(o1.getAge()< o1.getAge()){return -1;}else{if(o1.getScore()> o2.getScore()){return -1;}else if(o1.getScore()< o2.getScore()){return 1;}else{return 0;}}}
}
</span></span>
主方法:StudentSort 类测试对象数组、List集合排序功能
<span style="font-size:14px;"><span style="font-size:18px;">package cn.com.lcx.test;import java.util.Arrays;
import java.util.Collections;
import java.util.List;import cn.com.lcx.model.Student;
import cn.com.lcx.model.StudentComparator;public class StudentSort {/*** @param args*/public static void main(String[] args) {/*** 1、实现对象数组排序* (1)方法一,需要排序的对象所属的类实现Comparable接口,复写 comparaTo方法* (2)方法二,需要排序的对象所属的类已经完成无法实现Comparable接口,* 这种情况用实现Comparator接口,需要自定义排序规则类 复写compare方法* 最终排序用Arrays.sort方法*/Student[] stuArr = {new Student("lwx-1", 10, 100),new Student("lwx-2", 30, 90),new Student("lwx-3", 30, 95),new Student("lwx-4", 30, 85),new Student("lwx-5", 20, 70),new Student("lwx-6", 40, 60)};//方法一实现Comparable接口System.out.println("实现Comparable接口,数组对象排序前----------");printArr(stuArr);System.out.println("实现Comparable接口,数组对象排序后----------");Arrays.sort(stuArr);printArr(stuArr);//方法二自定义排序规则类实现Comparator接口System.out.println("实现Comparator接口,数组对象排序后----------");Arrays.sort(stuArr,new StudentComparator());printArr(stuArr);/*** 2、实现List集合排序,和对象数组是一样的规则,只是最终排序调用的工具类是Collections.sort()方法*/Student[] stuArr2 = {new Student("lwx-4", 30, 85),new Student("lwx-5", 20, 70),new Student("lwx-6", 40, 60),new Student("lwx-1", 10, 100),new Student("lwx-2", 30, 90),new Student("lwx-3", 30, 95)};List<Student> stuList = Arrays.asList(stuArr2);//方法一实现Comparable接口System.out.println("实现Comparable接口,List集合排序前----------");printList(stuList);System.out.println("实现Comparable接口,List集合排序后----------");Collections.sort(stuList);printList(stuList);//方法二自定义排序规则类实现Comparator接口System.out.println("实现Comparator接口,List集合排序后----------");Collections.sort(stuList,new StudentComparator());printList(stuList);}/*** 打印对象数组元素* @param objArr*/public static void printArr(Object[] objArr){for(Object obj: objArr){System.out.println(obj);}}/*** 打印List集合中的元素* @param list*/public static void printList(List list){for(Object obj: list){System.out.println(obj);}}
}</span></span>
验证结果:
使用Comparable、Comparator接口实现对对象数组、List集合自定义排序相关推荐
- 后端接口如何接受对象数组
后端接口如何接受对象数组 方式一:直接使用字符串接受 后端代码: @PostMapping("/addCommodityBatch")public String addCommod ...
- Java对象数组按照其属性排序的方法
问题描述: 开发时我们希望用一个类表示某种物品, 用其域来描述物品的特性, 当我们有一组物品也就是一个对象数组时,我们会希望这组物品按照它的某个属性来排序 也就是需要对象数组按照其属性排序 一 类定义 ...
- java util包排序_实现java.util.Comparator接口,对对象集合进行多属性组合排序
Commons - BeanUtils 提供了很多功能,其中一个很有用的是对对象集合进行排序,如Collections.sort(peoples, new BeanComparator("a ...
- JAVA-List排序-Collections.sort()-对象数组(集合)根据某一属性排序
JAVA-List排序-Collections.sort() 当我们想对一个对象数组(集合)根据某一属性进行排序时,我们可以使用list中的Collection.sort(),这是一种较快捷的方式. ...
- java入门~第十六天 对象数组以及集合和相关数据结构
1.对象数组 就是数组中的元素都是一个个的对象,但是并不是指对象本身,而是指的是对象的引用,即指向对象的那个指针,而这个指针是存放在虚拟机内存的栈中. 对象数组的创建需要两个步骤: 1:创建一 ...
- 利用Collections.sort方法重写Comparator接口的compare方法对list集合排序
Collections.sort()使用该方法实际是重写Comparator接口的compare方法实现排序://传入参数list集合,Comparator接口 T:list的元素类型 //如List ...
- java list集合自定义排序_Java 通过 Comparator comparing 对 list 自定义 排序
摘要: 在日常开发中,经常会用到排序算法,这里记录下日常使用比较多的排序方法,其中包括按指定指定:正序.倒序排序,还有按自定义字段排序的方法,方便日后查看: 一:按指定字段排序,默认倒序,如下写法: ...
- angular8实现对象数组根据某个属性排序(多个也可以)
代码中col是传进来的对象的属性名 toLowerCase()将字符串转换为小写. arrayInfos是数组,存储的是对象 这里我是配上一个上下切换的箭头使用的,点击切换上下方向并且排序 sort方 ...
- 学生对象数组实现按年龄排序 按成绩排序1022
需求 按照需求实现功能
最新文章
- php 超长用省略号代替
- virtualbox 在物理机是无线网卡的时候做桥接配置 - juandx - 博客园
- UI组件之AdapterView及其子类关系,Adapter接口及其实现类关系
- 关于Mybatis的几个问题
- Android开发学习之录音同步播放的实现
- 戴尔服务器阵列卡的更换
- 找零钱问题系列之暴力搜索
- 父与子一起学python3_父与子的编程之旅:与小卡特一起学python
- TokenGazer评级丨TRON:BTT众筹谋求熊市破局,生态繁荣但数据受到质疑
- 0204隐函数及由参数方程所确定的函数的导数相关变化率-导数与微分
- 好玩的表情包机器人微信小程序源码下载支持直接搜索仿聊天界面
- ORACLE数据库练习题整理(2)
- 怎么在Excel中凑数
- 判断二极管导通例题_通信电源 | 1个二极管是如何改变电流的?
- 针对好玩游戏物品清单
- u, v风和风速风向的相互转换
- 【java】莱布尼兹公式求解pi值
- 项目中成功的运用proxool连接池
- 火爆全网送给女朋友的微信每日多次消息推送程序来了!多版本多平台!
- 第三课 用OD脱壳的基本方法
热门文章
- 干货!无需任何工具,实测macOS双开微信客户端
- linux 跑天龙八部游戏脚本,求推荐天龙八部脚本(能自动打怪,捡包之类的)
- python交流群教学视频_自学 Python,视频教程和代码一看就懂,动手就废,应该这么学...
- jsp javabean mysql_jsp mysql JavaBean
- Vue笔记-vue3中.en.dev文件及axios.defaults.baseURL的使用
- 系统架构工作笔记-数据展示进程与读取数据进程分离,实现低耦合(展示软件可适用任意厂家数据库)
- Java基础入门笔记-随机数
- 专业课程设计之客户与服务器程序的同步与通信机制的设计(二)TCP通信
- 二叉排序数的构造-理论
- 虚拟机centos7 桥接模式