参考链接:

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;
    }
    @Override
    public String toString() {
    return "Student [name=" + name + ", id=" + id + "]";
    }
    //实现对象比较的方法(id从小到大排序)
    @Override
    public int compareTo(Student o) {
    if(id < o.id)
    return -1;
    else
    return 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() {
@Override
public 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 工具类:排序,查找替换。Set、List、Map 的of方法创建不可变集合

    Collections 工具类 Java 提供1个操作 Set List Map 等集合的工具类 Collections ,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集合 ...

  2. Java集合——Collections工具类

    Java集合——Collections工具类 摘要:本文主要学习了Collections工具类的常用方法. 概述 Collections工具类主要用来操作集合类,比如List和Set. 常用操作 排序 ...

  3. [Effective Java]第四章 类和接口

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. JAVA(四)类集/枚举

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

  5. java集合框架——工具类

    一.概述 JAVA集合框架中有两个很重要的工具类,一个是Collections,另一个是Arrays.分别封装了对集合的操作方法和对数组的操作方法,这些操作方法使得程序员的开发更加高效. public ...

  6. Java 集合的工具类Collections的常用方法

    Collections类 java.utils.Collections是集合工具类,用来对集合进行操作. Collections类的常用方法 这里介绍四个常用方法: addAll(Collection ...

  7. Java集合框架和数组的排序(转载)

    Java集合框架(*Collection)*和数组的排序 ​ 根据约定,在使用java编程的时候应尽可能的使用现有的类库,当然你也可以自己编写一个排序的方法,或者框架,但是有几个人能写得比JDK里的还 ...

  8. Java集合----Collection工具类

    Collections 工具类 Collections 是一个操作 Set.List 和 Map 等集合的工具类 Collections 中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了 ...

  9. JAVA 使用Comparator接口实现自定义排序

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

随机推荐

  1. 入门大数据---Hbase 过滤器详解

    一.HBase过滤器简介 Hbase 提供了种类丰富的过滤器(filter)来提高数据处理的效率,用户可以通过内置或自定义的过滤器来对数据进行过滤,所有的过滤器都在服务端生效,即谓词下推(predic ...

  2. SpringBoot中VO,DTO,DO,PO的概念、区别和用处

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zhuguang10/article/de ...

  3. P2114 [NOI2014]起床困难综合症【二进制运算+优化】

    起床困难综合症[二进制运算+优化] 题目描述 21世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm一直坚持与起床困难综合症作斗争.通过 ...

  4. .NET 开源工作流: Slickflow流程引擎高级开发(七)--消息队列(RabbitMQ)的集成使用

    前言:工作流流程过程中,除了正常的人工审批类型的节点外,事件类型的节点处理也尤为重要.比如比较常见的事件类型的节点有:Timer/Message/Signal等.本文重点阐述消息类型的节点处理,以及实 ...

  5. 关于线上一次DDOS攻击和阿里云DDOS防护相关内容

    问题 最近我们的一台阿里云服务器 (ECS,有公网IP,Nginx 服务器,开放了80,443),遭受到了DDOS攻击,主要攻击的行为是 攻击我们443 端口.发起大量的请求. 但是我们在 Nginx ...

  6. SqueezeNet/SqueezeNext简述 | 轻量级网络

    SqueezeNet系列是比较早期且经典的轻量级网络,SqueezeNet使用Fire模块进行参数压缩,而SqueezeNext则在此基础上加入分离卷积进行改进.虽然SqueezeNet系列不如Mob ...

  7. 超简洁!利用easyExcel导出,读入Excel

          x           深夜,在东莞,7天酒店,打开电脑,访问国内最大的同性交友网站.     日常开发中,导出导入场景非常多,尤其是对于后台管理更是一个列表一个导出,如果从导出的业务中抽 ...

  8. css/html 空格,html空格符的显示、标示方式【html空格代码】

    在html里面空格的话,你直接敲打出来的空格是不可以的,下面将通过html和css中设置显示空格的实现总结: Html中空格 符号 编号 描述      不断行的空白(1个字符宽度), 不换行空格 全 ...

  9. 使用flex实现5种常用布局

    Sticky Footer 经典的上-中-下布局. 当页面内容高度小于可视区域高度时,footer 吸附在底部:当页面内容高度大于可视区域高度时,footer 被撑开排在 content 下方 dem ...

  10. rem和px

    做过一段时间的H5页面,但是对于rem与px的换算还是比较模糊,总是引用一段脚本,也没有深究过为什么,就稀里糊涂的用了,遇到一些细微的地方,总是不知道是什么原因导致的,我总是只要能完成效果就行,全然不 ...