参考链接:

HOW2J.CN

前言

对于JAVA集合,都能够用集合的工具类Collections 提供的方法:

  1. Collections.sort(List list)
  2. Collections.sort(List list, Comparator c)

来进行排序。很多时候,集合中存储的不是基本的数据类型,而是我们自己定义的类的对象,我们希望用自己的排序方式对集合中的元素进行排序,我们可以通过让类实现Comparable接口来自定义排序方式,也可以采用创建匿名内部类的做法进行自定义排序

实现Comparable接口

  1. 让待排序的类继承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;}
    }
    
  2. 直接使用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集合四:比较器--类自定义排序相关推荐

  1. JAVA集合框架工具类自定义Collections集合方法

    项目中有需要多次统计 某些集合中 的某个属性值,所以考虑封装一个方法,让其其定义实现计算方式. 话不多说,看代码: 1.封装的自定义集合工具类:CollectionsCustom [Java] 纯文本 ...

  2. Java集合(实现类线程安全性)

    转载自  Java集合(实现类线程安全性) 1.集合和Map 下图是Java集合的Collection集合体系的继承树: 下图是Java的Map体系的继承树: 对于Set.List.Queue和Map ...

  3. java排序接口_详解JAVA使用Comparator接口实现自定义排序

    1.原则 Comparator接口可以实现自定义排序,实现Comparator接口时,要重写compare方法: int compare(Object o1, Object o2) 返回一个基本类型的 ...

  4. java基础集合操作工具类Collections简述(java集合四)

    对集合中的元素进行排序 Collections中的sort方法使用 public class ListDemo {public static void main(String[] args) {Lis ...

  5. JAVA(四)类集/枚举

    成鹏致远 | lcw.cnblog.com |2014-02-04 JAVA类集 1.认识类集 类集的作用 类集实际上就是一个动态的对象数组,与一般的对象数组不同,类集中的对象内容可以任意扩充 类集的 ...

  6. Java集合或Map中元素排序及过滤

    在Java中,对集合或Map中元素进行排序或过滤是一个频繁操作.这里以List为例介绍下如何在集合中实现元素的排序和过滤功能.对于非List元素(Set.Map)等,一方面可以参考List使用类似的方 ...

  7. 什么是java集合,java集合有几类?

    什么是java集合? 一.集合的由来 通常,我们的Java程序需要根据程序运行时才知道创建了多少个对象.但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型.为 ...

  8. java集合框架LinkedList类的方法理解

    java提供的LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用. LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口 ...

  9. java 重写compareTo方法实现类自定义排序

    废话不多说,贴上代码!!! package com.xxxxxx.xxxxxx.xxxxxx;import java.util.ArrayList; import java.util.Collecti ...

最新文章

  1. [导入]CSS: 不換行 寫法
  2. 统计学习方法-李航(6)
  3. 腾讯申请自动驾驶相关专利 可实现自动变道
  4. 【干货】京东电商推荐系统的应用实践.pdf(附下载链接)
  5. 【Python笔记】网络爬虫——常用框架介绍以及 Scrapy 框架使用
  6. python程序员年薪20万_据说做好这几道考题的python程序员年薪超20万
  7. 2019电赛巡线机器人总结
  8. html日期选择器小日历样式,9 款样式华丽的 jQuery 日期选择和日历控件
  9. 半导体芯片行业的运作模式(IDM/Fabless/Foundry模式)
  10. vue webpack之vue-router 使用history模式报错Cannot GET /xxx
  11. WPF渲染事件CompositionTarget.Rendering
  12. 再见python你好go语言_再见,Python!你好,Go语言
  13. Web前端-HTML学习笔记一
  14. 搜索凑单页大促显示延迟方案设计
  15. 服务器打不井根目录下的文件,服务器共享文件夹的使用方法.docx
  16. Ant学习笔记(Ant入门)
  17. 两会话文明 | 文明的行为,也是最美的风景
  18. welook手机视频通话软件
  19. Android多条短信监听不到,Android短信验证码监听,解决onChange多次调用
  20. 服务器防火墙开启后打不开网站,防火墙开启后windows电脑上不了网怎么办_网站服务器运行维护...

热门文章

  1. micropython和python区别-(一)什么是MicroPython?
  2. python编程入门经典-总算理解python编程入门经典教程
  3. 通过重新训练语音识别来改善iPhone上的嘿Siri | MOS86
  4. 普强“千语”语音识别引擎应用场景
  5. java虚拟机结构图解(堆栈方法区)
  6. 前端emojs_Emoji-Chat emoji表情包发送及显示兼容web端、移动端
  7. ffdshow 源代码分析 6: 对解码器的dll的封装(libavcodec)
  8. FFMPEG结构体分析:AVFormatContext
  9. 火狐 mysql插件_火狐firebug和firepath插件安装方法(最新)
  10. 2018服务器 芯片组,2018最新主板知识详解,详谈DIY(主板篇)