详解JAVA使用Comparator接口实现自定义排序
时间:2019-03-18
这篇文章主要介绍了JAVA使用Comparator接口实现自定义排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
1、原则
Comparator接口可以实现自定义排序,实现Comparator接口时,要重写compare方法:
int compare(Object o1, Object o2) 返回一个基本类型的整型
如果要按照升序排序,则o1 小于o2,返回-1(负数),相等返回0,01大于02返回1(正数)
如果要按照降序排序,则o1 小于o2,返回1(正数),相等返回0,01大于02返回-1(负数)
1 import java.util.ArrayList; 2 import java.util.Comparator; 3 import java.util.List; 4 5 public class UserComparator implements Comparator < User > { 6 7 public static void main( String[] args ) { 8 List < User > users = new ArrayList < User >(); 9 users.add( new User( 10, "a" ) ); 10 users.add( new User( 11, "d" ) ); 11 users.add( new User( 15, "s" ) ); 12 users.add( new User( 6, "x" ) ); 13 users.add( new User( 17, "a" ) ); 14 users.add( new User( 17, "b" ) ); 15 users.add( new User( 17, "c" ) ); 16 users.add( new User( 17, "d" ) ); 17 UserComparator comparator = new UserComparator(); 18 19 users.sort( comparator ); 20 // 也可以使用:Collections.sort( users, comparator ); 21 22 for ( User u : users ) { 23 System.out.println( u ); 24 } 25 } 26 27 @Override 28 public int compare( User u1, User u2 ) { 29 if ( u1.equals( u2 ) ) { 30 return 0; 31 } 32 else if ( u1.getAge() < u2.getAge() ) { 33 return 1; 34 } 35 else if ( u1.getAge() == u2.getAge() ) { 36 int f = u1.getName().compareTo( u2.getName() ); 37 if ( f < 0 ) { 38 return -1; 39 } 40 return 0; 41 } 42 else { 43 return -1; 44 } 45 } 46 } 47 48 class User { 49 private int age; 50 private String name; 51 52 public User() { 53 54 } 55 56 public User( int age, String name ) { 57 this.age = age; 58 this.name = name; 59 } 60 61 public int getAge() { 62 return age; 63 } 64 65 public void setAge( int age ) { 66 this.age = age; 67 } 68 69 public String getName() { 70 return name; 71 } 72 73 public void setName( String name ) { 74 this.name = name; 75 } 76 77 @Override 78 public String toString() { 79 return "User [age=" + age + ", name=" + name + "]"; 80 } 81 82 }
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接口实现自定义排序详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
- PyCharm 自定义文件和代码模板
- kotlin到底好在哪里?
- Django 1.10中文文档-第一个应用Part6-静态文件
- Django 1.10中文文档-第一个应用Part5-测试
- 设计模式(5)-己所不欲,施之于人(代理模式)
- Python标准库笔记(4) — collections模块
- 使用captcha模块生成图形验证码
- 设计模式(6)-装饰器(认识程序中的装饰器)
- Selenium Webdriver常用方法
- 设计模式(7)-模板(从事务处理应用的模板)
- Python NLP入门教程
- 设计模式(8)-状态模式(关注状态之间的变化)
- Python标准库笔记(6) — struct模块
- Golang中image/jpeg包和image/png包用法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Docker常用方法总结
- graph attention network(ICLR2018)官方代码详解(tensorflow)-稀疏矩阵版
- graph attention network(ICLR2018)官方代码详解(tensorflow)
- 在SAP Spartacus产品明细页面用outlet显示自定义数据
- 如何在SAP Spartacus自定义Component里消费数据
- 使用ConfigModule.withConfig替换SAP Spartacus标准Component
- pod 资源对象
- 在Java8的foreach()中使用return/break/continue
- JavaScript 覆盖对象字段级别
- Zabbix5.0 问题记录
- 「查缺补漏」巩固你的Nginx知识体系
- 超级帐本合约调用——fabric SDK Node调用TBaaS的合约
- TBaaS合约调用_fabric SDK Node 不使用Connection Profile
- helm安装、使用、实践
- 浅析asp .net core 中间件