1、原则

Comparator接口可以实现自定义排序,实现Comparator接口时,要重写compare方法:

int compare(Object o1, Object o2) 返回一个基本类型的整型

如果要按照升序排序,则o1 小于o2,返回-1(负数),相等返回0,01大于02返回1(正数)

如果要按照降序排序,则o1 小于o2,返回1(正数),相等返回0,01大于02返回-1(负数)

import java.util.ArrayList;

import java.util.Comparator;

import java.util.List;

public class UserComparator implements Comparator < User > {

public static void main( String[] args ) {

List < User > users = new ArrayList < User >();

users.add( new User( 10, "a" ) );

users.add( new User( 11, "d" ) );

users.add( new User( 15, "s" ) );

users.add( new User( 6, "x" ) );

users.add( new User( 17, "a" ) );

users.add( new User( 17, "b" ) );

users.add( new User( 17, "c" ) );

users.add( new User( 17, "d" ) );

UserComparator comparator = new UserComparator();

users.sort( comparator );

// 也可以使用:Collections.sort( users, comparator );

for ( User u : users ) {

System.out.println( u );

}

}

@Override

public int compare( User u1, User u2 ) {

if ( u1.equals( u2 ) ) {

return 0;

}

else if ( u1.getAge() < u2.getAge() ) {

return 1;

}

else if ( u1.getAge() == u2.getAge() ) {

int f = u1.getName().compareTo( u2.getName() );

if ( f < 0 ) {

return -1;

}

return 0;

}

else {

return -1;

}

}

}

class User {

private int age;

private String name;

public User() {

}

public User( int age, String name ) {

this.age = age;

this.name = name;

}

public int getAge() {

return age;

}

public void setAge( int age ) {

this.age = age;

}

public String getName() {

return name;

}

public void setName( String name ) {

this.name = name;

}

@Override

public String toString() {

return "User [age=" + age + ", name=" + name + "]";

}

}

User [age=17, name=a]

User [age=17, name=b]

User [age=17, name=c]

User [age=17, name=d]

User [age=15, name=s]

User [age=11, name=d]

User [age=10, name=a]

User [age=6, name=x]

以上所述是小编给大家介绍的JAVA使用Comparator接口实现自定义排序详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对聚米学院网站的支持!

java排序接口_详解JAVA使用Comparator接口实现自定义排序相关推荐

  1. java内部格式_详解java内部类的访问格式和规则

    详解java内部类的访问格式和规则 1.内部类的定义 定义一个类来描述事物,但是这个事物其中可能还有事物,这时候在类中再定义类来描述. 2.内部类访问规则 ①内部类可以直接访问外部类中的成员,包括私有 ...

  2. Java implement意思_详解JAVA中implement和extends的区别

    详解JAVA中implement和extends的区别 发布于 2020-4-14| 复制链接 摘记: 详解JAVA中implement和extends的区别extends是继承父类,只要那个类不是声 ...

  3. java runnable 异常_详解Java中多线程异常捕获Runnable的实现

    详解Java中多线程异常捕获Runnable的实现 1.背景: Java 多线程异常不向主线程抛,自己处理,外部捕获不了异常.所以要实现主线程对子线程异常的捕获. 2.工具: 实现Runnable接口 ...

  4. java 引用传递_详解java的值传递、地址传递、引用传递

    详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...

  5. python java混合编程_详解java调用python的几种用法(看这篇就够了)

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  6. java sleep唤醒_详解Java中的线程让步yield()与线程休眠sleep()方法

    Java中的线程让步会让线程让出优先级,而休眠则会让线程进入阻塞状态等待被唤醒,这里我们对比线程等待的wait()方法,来详解Java中的线程让步yield()与线程休眠sleep()方法 线程让步: ...

  7. java 代码块_详解java中的四种代码块

    在java中用{}括起来的称为代码块,代码块可分为以下四种: 一.简介 1.普通代码块: 类中方法的方法体 2.构造代码块: 构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行. ...

  8. java static 函数_详解java中的static关键字

    Java中的static关键字可以用于修饰变量.方法.代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字不同的作用,且在开发中使用广泛,这里做一下深入了解. 静态资 ...

  9. java策略管理_详解Java编程中的策略模式

    策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式的结构 策略模式 ...

最新文章

  1. CVPR 2020:华为GhostNet,超越谷歌MobileNet,已开源
  2. 读javascript高级程序设计15-Ajax,CORS,JSONP,Img Ping
  3. sizeof 是关键字不是函数!使用sizeof需要注意?
  4. Linux┊理解devfs、sysfs、udev、tmpfs
  5. 使用Visual Studio 创建可视Web Part部件
  6. Java 8 LongAdders:管理并发计数器的正确方法
  7. synchronized原理_面试必备—Synchronized 关键字使用、底层原理
  8. Android更改桌面应用程序launcher的两种方式
  9. 人工智能领域有哪些曾被拒稿的优秀工作?
  10. regedit 导入注册表
  11. SequoiaDB分布式数据库2021.12月刊
  12. 基于android的校园新闻app,移动端校园新闻APP的设计探析
  13. 解决Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2)
  14. 使用anysdk打包android渠道
  15. 查看centos是多少位的方式
  16. SyntaxError: Non-UTF-8 code starting with ‘\xc6‘ in file xxxbut no encoding declared
  17. 微信小程序:小程序服务器域名配置合法域名
  18. 人物抠图 php,php抠图教程(混合模式+剪切蒙版)
  19. wordpress创建_如何在WordPress中轻松创建优惠券网站
  20. icode编程图形化|一级训练场|基本操作

热门文章

  1. 第二十一章 Chisel基础——黑盒
  2. matlab安装LIBSVM
  3. VMOS Pro云手机数据迁移教程参考
  4. 集成学习(三):adaboost算法推导
  5. 使用HTTP的GET请求做一个简单的天气预报
  6. python飞机大战游戏代码_python实现飞机大战游戏
  7. Python语言反射之我见
  8. Neuron:精神病学中的功能神经成像和失败案例
  9. Pscc2019的新增功能选择主体,学习面板,画笔工具,弯度钢笔工具
  10. Java操作ElasticSearch