JAVA集合四:比较器--类自定义排序
参考链接:
HOW2J.CN
前言
对于JAVA集合,都能够用集合的工具类Collections 提供的方法:
- Collections.sort(List list)
- Collections.sort(List list, Comparator c)
来进行排序。很多时候,集合中存储的不是基本的数据类型,而是我们自己定义的类的对象,我们希望用自己的排序方式对集合中的元素进行排序,我们可以通过让类实现Comparable接口来自定义排序方式,也可以采用创建匿名内部类的做法进行自定义排序。
实现Comparable接口
让待排序的类继承Comparable接口,并实现compareTo方法(相当于给类提供了排序依据)
package blog;/** Student 类*/ public class Student implements Comparable<Student>{private String name;private int id;public Student(String name, int id) {this.name = name;this.id = id;}@Overridepublic String toString() {return "Student [name=" + name + ", id=" + id + "]";}//实现对象比较的方法(id从小到大排序)@Overridepublic int compareTo(Student o) {if(id < o.id)return -1;elsereturn 1;} }
直接使用Collections.sort(List list)进行排序
package blog;import java.util.ArrayList; import java.util.Collections; import java.util.List;public class Main {public static void main(String[] args) {List<Student> students = new ArrayList<Student>();students.add(new Student("xsy", 2));students.add(new Student("theory", 1));students.add(new Student("衍射",3));//排序前System.out.println("排序前:");for(Student student : students) {System.out.println(student);}//排序后(按照id从小到大)Collections.sort(students);System.out.println("排序后:");for(Student student : students) {System.out.println(student);}} }
排序前:
Student [name=xsy, id=2]
Student [name=theory, id=1]
Student [name=衍射, id=3]
排序后:
Student [name=theory, id=1]
Student [name=xsy, id=2]
Student [name=衍射, id=3]
JAVA创建匿名内部类
类不需要继承接口,只需要在排序时重写Comparator的compare方法:
package blog;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;public class Main {public static void main(String[] args) {List<Student> students = new ArrayList<Student>();students.add(new Student("xsy", 2));students.add(new Student("theory", 1));students.add(new Student("衍射",3));//排序前System.out.println("排序前:");for(Student student : students) {System.out.println(student);}//排序后(按照id从小到大)-- 重写Comparator的compare方法Collections.sort(students, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {if(o1 instanceof Student && o2 instanceof Student) {Student s1 = (Student)o1;Student s2 = (Student)o2;return s1.getId()-s2.getId();}return 0;} });System.out.println("排序后:");for(Student student : students) {System.out.println(student);}}
}
运行结果如下:
排序前:
Student [name=xsy, id=2]
Student [name=theory, id=1]
Student [name=衍射, id=3]
排序后:
Student [name=theory, id=1]
Student [name=xsy, id=2]
Student [name=衍射, id=3]
JAVA集合四:比较器--类自定义排序相关推荐
- JAVA集合框架工具类自定义Collections集合方法
项目中有需要多次统计 某些集合中 的某个属性值,所以考虑封装一个方法,让其其定义实现计算方式. 话不多说,看代码: 1.封装的自定义集合工具类:CollectionsCustom [Java] 纯文本 ...
- Java集合(实现类线程安全性)
转载自 Java集合(实现类线程安全性) 1.集合和Map 下图是Java集合的Collection集合体系的继承树: 下图是Java的Map体系的继承树: 对于Set.List.Queue和Map ...
- java排序接口_详解JAVA使用Comparator接口实现自定义排序
1.原则 Comparator接口可以实现自定义排序,实现Comparator接口时,要重写compare方法: int compare(Object o1, Object o2) 返回一个基本类型的 ...
- java基础集合操作工具类Collections简述(java集合四)
对集合中的元素进行排序 Collections中的sort方法使用 public class ListDemo {public static void main(String[] args) {Lis ...
- JAVA(四)类集/枚举
成鹏致远 | lcw.cnblog.com |2014-02-04 JAVA类集 1.认识类集 类集的作用 类集实际上就是一个动态的对象数组,与一般的对象数组不同,类集中的对象内容可以任意扩充 类集的 ...
- Java集合或Map中元素排序及过滤
在Java中,对集合或Map中元素进行排序或过滤是一个频繁操作.这里以List为例介绍下如何在集合中实现元素的排序和过滤功能.对于非List元素(Set.Map)等,一方面可以参考List使用类似的方 ...
- 什么是java集合,java集合有几类?
什么是java集合? 一.集合的由来 通常,我们的Java程序需要根据程序运行时才知道创建了多少个对象.但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型.为 ...
- java集合框架LinkedList类的方法理解
java提供的LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用. LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口 ...
- java 重写compareTo方法实现类自定义排序
废话不多说,贴上代码!!! package com.xxxxxx.xxxxxx.xxxxxx;import java.util.ArrayList; import java.util.Collecti ...
最新文章
- [导入]CSS: 不換行 寫法
- 统计学习方法-李航(6)
- 腾讯申请自动驾驶相关专利 可实现自动变道
- 【干货】京东电商推荐系统的应用实践.pdf(附下载链接)
- 【Python笔记】网络爬虫——常用框架介绍以及 Scrapy 框架使用
- python程序员年薪20万_据说做好这几道考题的python程序员年薪超20万
- 2019电赛巡线机器人总结
- html日期选择器小日历样式,9 款样式华丽的 jQuery 日期选择和日历控件
- 半导体芯片行业的运作模式(IDM/Fabless/Foundry模式)
- vue webpack之vue-router 使用history模式报错Cannot GET /xxx
- WPF渲染事件CompositionTarget.Rendering
- 再见python你好go语言_再见,Python!你好,Go语言
- Web前端-HTML学习笔记一
- 搜索凑单页大促显示延迟方案设计
- 服务器打不井根目录下的文件,服务器共享文件夹的使用方法.docx
- Ant学习笔记(Ant入门)
- 两会话文明 | 文明的行为,也是最美的风景
- welook手机视频通话软件
- Android多条短信监听不到,Android短信验证码监听,解决onChange多次调用
- 服务器防火墙开启后打不开网站,防火墙开启后windows电脑上不了网怎么办_网站服务器运行维护...
热门文章
- micropython和python区别-(一)什么是MicroPython?
- python编程入门经典-总算理解python编程入门经典教程
- 通过重新训练语音识别来改善iPhone上的嘿Siri | MOS86
- 普强“千语”语音识别引擎应用场景
- java虚拟机结构图解(堆栈方法区)
- 前端emojs_Emoji-Chat emoji表情包发送及显示兼容web端、移动端
- ffdshow 源代码分析 6: 对解码器的dll的封装(libavcodec)
- FFMPEG结构体分析:AVFormatContext
- 火狐 mysql插件_火狐firebug和firepath插件安装方法(最新)
- 2018服务器 芯片组,2018最新主板知识详解,详谈DIY(主板篇)