Java实现对象列表排序
Java实现多个对象排序(两种方式)
如果是Java自定义的对象,需要对多个对象进行排序,这里使用Java自身提供的排序函数Collections.sort();但是我们的对象需要支持这个函数,需要做一些改动。有两种方式实现,第一种是自定义对象实现Comparable接口,并且覆盖compareTo方法,将这个方法的逻辑替换为自己的排序逻辑;另外一种方式是在排序时使用Comparator类,并且覆盖compare方法,改写为自己排序的逻辑。
实现Comparable类明确表示这个自定义类别是支持排序的,使用Comparator类非常灵活,可以在需要排序的时候才使用。
我们看下Collections.sort()函数的官方定义,可以看到,支持的类型是需要实现Comparable接口的
public static <T extends Comparable<? super T>> void sort(List<T> list)
另外一个重载的方法,明确需要一个Comparator
public static <T> void sort(List<T> list, Comparator<? super T> c)
接下来详解两种方式
Comparable 方式
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;public class SortObj {public void demoForComparable() {CutePig pig1 = new CutePig("猪聪明", 18); // 第一个对象CutePig pig2 = new CutePig("猪可爱", 12); // 第二个对象CutePig pig3 = new CutePig("猪能干", 16); // 第三个对象ArrayList<CutePig> pigList = new ArrayList<>();pigList.add(pig1);pigList.add(pig2);pigList.add(pig3);Collections.sort(pigList);System.out.println("按年龄排序(升序)后结果如下");for (CutePig pig : pigList) {System.out.println(pig.toString());}}public static void main(String[] args) {SortObj obj = new SortObj();obj.demoForComparable();}class CutePig implements Comparable<CutePig> {String name;int age;public CutePig(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "name is " + this.name + "; age is " + this.age;}@Overridepublic int compareTo(CutePig other) {return this.age - other.age;}}
}
运行结果如下
按年龄排序(升序)后结果如下
name is 猪可爱; age is 12
name is 猪能干; age is 16
name is 猪聪明; age is 18
Comparator 方式
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;public class SortObj {public void demoForComparator() {SweetHeart love1 = new SweetHeart("猪可爱", "pig");SweetHeart love2 = new SweetHeart("哈士奇", "dog");SweetHeart love3 = new SweetHeart("大火鸡", "chicken");ArrayList<SweetHeart> loveList = new ArrayList<>();loveList.add(love1);loveList.add(love2);loveList.add(love3);Collections.sort(loveList, new Comparator<SweetHeart>() {@Overridepublic int compare(SweetHeart sweet1, SweetHeart sweet2) {return sweet2.type.compareTo(sweet1.type);}});System.out.println("按类型首字母排序(降序)后结果如下");for (SweetHeart love : loveList) {System.out.println(love.toString());}}public static void main(String[] args) {SortObj obj = new SortObj();obj.demoForComparator();}class SweetHeart {String name;String type;public SweetHeart(String name, String type) {this.name = name;this.type = type;}@Overridepublic String toString() {return "name is " + this.name + "; type is " + this.type;}}}
运行结果如下
name is 猪可爱; type is pig
name is 哈士奇; type is dog
name is 大火鸡; type is chicken
Java实现对象列表排序相关推荐
- Java 8 Comparator: 列表排序
1.按字母顺序排序字符串列表 List<String> cities = Arrays.asList("Milan","london"," ...
- java map对象排序输出_java实现对象的排序(List和Map)
java实现对象的排序(List和Map) List和Map的排序 在实际的开发当中,我们经常 在文件浏览的时候经常有多种浏览方式,按时间整箱排序,逆向排序,按大小正逆向排序 ,按 按价格正逆向排序, ...
- java compareto方法怎么排序的_深入理解Java中Comparable和Comparator排序
本文有牛旦教育原创,头条首发,转载注明来源. 如何为需要的排序算法选择正确的接口?通过本文的分析讲解,我们会找到答案参考答案. 程序员经常需要将数据库中的元素排序为集合.数组或映射.在Java中,我们 ...
- php 把java list对象转成数组,java_JSON的String字符串与Java的List列表对象的相互转换,在前端:
1.如果json是List对象 - phpStudy...
JSON的String字符串与Java的List列表对象的相互转换 在前端:1.如果json是List对象转换的,可以直接遍历json,读取数据. 2.如果是需要把前端的List对象转换为json传到 ...
- java对列表数据排序_如何在Java中对列表进行排序
java对列表数据排序 Sometimes we have to sort a list in Java before processing its elements. In this tutoria ...
- java list 转json 字符串_JSON的String字符串与Java的List列表对象的相互转换
1.JSON的String字符串与Java的List列表对象的相互转换 在前端: 1.如果json是List对象转换的,可以直接遍历json,读取数据. 2.如果是需要把前端的List对象转换为jso ...
- JAVA中如何将一个json形式的字符串转为json对象或对象列表
import java.util.*; import java.text.SimpleDateFormat;import org.json.JSONObject; import org.json.JS ...
- Java对List对象进行排序
为什么80%的码农都做不了架构师?>>> 有时候需要对List对象进行排序,如果每一处都去写一个排序方法,就会产生重复代码的坏味道,而且每一处都写,工作量会很大. 我们知道,J ...
- 如何在Java中对Collection对象进行排序?
排序集合的对象 (Sorting objects of the Collection) This concept is related to sorting and here we will see ...
最新文章
- 干货|深入浅出YOLOv5
- 打通Devops的Scrum敏捷工具
- PAT甲级1132 Cut Integer:[C++题解]
- 开头和结尾标记 在不同系统_文本标记的宝藏平台——Docusky
- Linux (Ubuntu/deepin等)终端命令安装Lamp
- 一款简单好用的开源文档管理系统
- Vue图表(v-charts, e-charts)入门安装使用
- 2020主流室内定位技术对比
- Excel 2010 VBA 入门 140 在功能区添加按钮并运行VBA程序
- 如何做好新媒体运营推广工作,黎想首谈一位优秀新媒体运营策划人员的思维模型
- qsort函数的使用
- SSD与HDD如何混合组raid并永久挂载硬盘?
- MAC Catalina系统问题总结与解决办法
- BERT 获取最后一层或每一层网络的向量输出
- 对list集合排序升序和降序使用sort()
- 使用scrapy做爬虫遇到的一些坑:网站常用的反爬虫策略,如何机智的躲过反爬虫Crawled (403)
- ffmpeg常用滤镜命令
- 频率响应范围测试软件,Analog Discovery 2 测评(3) 频率响应测试利器
- 【进阶版】机器学习之模型性能度量及比较检验和偏差与方差总结(02)
- 从此再不吃“肯德基”,无论那个管状物是蛔虫还是鸡肉组织