文档章节

Java 排序Comparator的实践

刘付kin
 刘付kin
发布于 2016/12/07 11:06
字数 552
阅读 6
收藏 0
点赞 0
评论 0

一般都是对自定义类的排序才需要进行排序规则的定义,因为普通的数据类型,比如说:int 、String、long等都已经实现了implements Comparator<T>接口,这个接口里面就两个抽象方法:compare() 和 equals(),而equals在object中定义的,所以所有类都会实现了这个方法,因而就只需要实现compare()即可。

1:展示代码如下

public class User implements  Comparator<User>{

	public String name;
	
	public int age;
	
	public String addr;
	
	public String sortType;
	
	[@Override](https://my.oschina.net/u/1162528)
	public int compare(User o1, User o2) {
		// TODO Auto-generated method stub
		if("UP".equals(sortType)){//升序
			return o1.age - o2.age;
		}else if("DOWN".equals(sortType)){//降序
			return o2.age - o1.age;
		}else{                    //默认为升序
			return o1.age - o2.age;
		}
	}
}

2:使用

public class UserCompareTest {

	public static void main(String[] args) {
		User user = new User();
		user.age = 11;
		
		User user1 = new User();
		user.age = 5;
		
		User user2 = new User();
		user.age = 8;
		
		User user3 = new User();
		user.age = 3;
		
		
		List<User> users = new ArrayList<User>();
		users.add(user);
		users.add(user1);
		users.add(user2);
		users.add(user3);
		
		System.out.println(users);
		
		Collections.sort(users, new User());
		
		System.out.println(users);
	}
}

3:另一种比较经典的匿名类方式,就是如果很少对这个对象列表进行排序的话,那么这个类就不用实现implements Comparator<T>接口,可以在需要排序的时候,在调用方使用Comparator<T>接口的匿名类对象形式来对这个类进行排序

代码如下:

public class User{
	//实体类什么都不用管,排序规则由需要排序的时候使用Comparator<T>接口的匿名类对象来处理。

	public String name;
	
	public int age;
	
	public String addr;
	
	public String sortType;
}

调用:

public static void main(String[] args) {
	User user = new User();
	user.age = 11;
	
	User user1 = new User();
	user1.age = 5;
	
	User user2 = new User();
	user2.age = 8;
	
	User user3 = new User();
	user3.age = 3;
	
	
	List<User> users = new ArrayList<User>();
	users.add(user);
	users.add(user1);
	users.add(user2);
	users.add(user3);
	
	System.out.println(users);
	
	Collections.sort(users,new Comparator<User>() {
		//匿名类对象的形式
		[@Override](https://my.oschina.net/u/1162528)
		public int compare(User o1, User o2) {
			// TODO Auto-generated method stub
			return o1.age - o2.age;
		}
	});
	
	System.out.println(users);
}

}

#总结:

使用sort方法排序的方式就这两种,如果是自己定义的对象,那么就需要自己定义排序规则,但是如果是系统提供的那些基本数据类型,比如string、int、long等,由于已经实现了这个comparetor<T>接口所以就不需要进行规则的定义

© 著作权归作者所有

共有 人打赏支持
刘付kin
粉丝 6
博文 100
码字总数 72832
作品 0
深圳
Java PriorityQueue && PriorityBlockingQueue

Java PriorityQueue && PriorityBlockingQueue 我们知道队列是遵循先进先出(First-In-First-Out)模式的,但有些时候需要在队列中基于优先级处理对象。举个例子,比方说我们有一个每日交易时...

秋风醉了
2015/01/12
0
0
Java的Comparable接口的一个陷阱

Java的Comparable接口提供一个对实现了这个接口的对象列表进行排序的办法。原始的排序对于简单的对象来说具有意义,但是当我们面对复杂的面向对象的业务逻辑对象时,事情变得复杂的多。从业务...

王振威
2012/05/06
0
7
Comparator与Comparable的应用

当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。 阅读过程中有任何问题,请联系egg: 邮箱:xtfggef@gmail.com 微...

mrliuze
2015/08/04
0
0
第二章 一节spring-core之comparator深入解读

前言 本章节深入讲解spring的comparator,使用与细节,帮助大家在项目里面正确使用comparator。源码解读无法通过文字很详细的解释,诠释。需要读者多次阅读,深入理解,组织逻辑,大脑慢慢形成...

鸟菜啊
04/18
0
0
Java学习资料-Comparable和Comparator实现对象比较

当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。下面通过两个例子分别用Comparable和Comparator实现对User对象中年...

晓阳
2015/01/22
0
0
Hadoop 实现定制的Writable类型(附部分源码)

本人博客开始迁移,博客整个架构自己搭建及编码http://www.cookqq.com/listBlog.action writeable接口对java基本类型提供了封装,short和char除外。所有的封装包含get()和set()两个方法用于读...

cookqq
2013/07/02
0
0
图解 Java IO : 一、File源码

Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter :BYSocket 记得Java源码是集合开始看的,写了一系列集合相关的文章,受到不错的评价。感...

泥沙砖瓦浆木匠
2015/07/15
0
4
Google Guava Collections 使用介绍

Google Guava Collections(以下都简称为 Guava Collections)是 Java Collections Framework 的增强和扩展。每个 Java 开发者都会在工作中使用各种数据结构,很多情况下 Java Collections F...

毒性逆转
2011/11/17
0
1
(java)总结TreeSet排序问题,其他的集合框架也如此

java中接口Set有众多实现类,而HashSet和TreeSet是最常用的两个,这里总结TreeSet实现排序的2种方式: 1.通过TreeSet(Comparator<? super E> comparator) 构造方法指定TreeSet的比较器进行排...

moz1q1
2014/12/13
0
0
java集合入门和深入学习,看这篇就差不多了

集合框架: Java中的集合框架大类可分为Collection和Map;两者的区别: Collection是单列集合;Map是双列集合 Collection中只有Set系列要求元素唯一;Map中键需要唯一,值可以重复 Collecti...

sihailoveyan
05/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

什么是Base64

一、什么是Base64? 百度百科中对Base64有一个很好的解释:“Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法”。 什么是...

Jack088
8分钟前
0
0
SQL多表联查leftjoin左边加表单

SELECT IFNULL(u.USER_ACCOUNT, o.USER_ACCOUNT) u.USER_ACCOUNT, o.* FROM gh_orders o LEFT JOIN gh_user u ON o.PARENT_ID = u.ROW_ID 1.假如u.USER_ACCOUNT不空返回u.USER_ACCOUNT,否则返......

森火
12分钟前
0
0
expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统

expect脚本同步文件 更改权限 执行脚本 查看执行结果 expect eof需要加上,作用是等脚本命令执行完再进行退出 expect脚本指定host和要同步的文件 更改权限,执行脚本 构建文件分发系统 需求背...

Zhouliang6
50分钟前
1
0
Hive应用:外部分区表

Hive应用:外部分区表 介绍 Hive可以创建外部分区表。创建表的时候,分区要在建表语句中体现。建完之后,你不会在表中看到数据,需要进行分区添加,使用alter语句进行添加。然后数据才会显示...

星汉
今天
3
0
点击Enter登录

1. 效果 2. 实现过程(记得引入jq文件) //6.回车事件 登录 $(function() { document.onkeydown = function(event) { var e = event || window.event || arguments.callee.caller.arguments......

Lucky_Me
今天
1
0
点击菜单内容切换

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .menu{ height: 38px; background-color: #eeeeee; line-height: 38px; } .mao{ ......

南桥北木
今天
1
0
OSChina 周六乱弹 —— 妹子和游戏哪个更好玩

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享唐朝乐队的单曲《国际歌》 《国际歌》- 唐朝乐队 手机党少年们想听歌,请使劲儿戳(这里) @举个栗子- :日常祈雨 邪恶的大祭...

小小编辑
今天
613
8
流利阅读笔记32-20180721待学习

“人工智能”造假:只有人工,没有智能 Lala 2018-07-21 1.今日导读 当今社会,擅长单个方面的人工智能已经盛行,手机借助 AI 智慧防抖技术帮助大家拍出清晰照片,谷歌研发的 AI 助手将可以帮...

aibinxiao
今天
10
0
我的成长记录(一)

今天突然精神抖擞,在我的博客下新开一项分类>成长记录,专门记录每隔一段时间我的一点感悟吧。因为今天才专门花时间新开这样一个分类,所以以前有过的一些感悟没有记录下来,现在已经想不起...

dtqq
今天
1
0
机器学习管理平台 MLFlow

最近工作很忙,博客一直都没有更新。抽时间给大家介绍一下Databrick开源的机器学习管理平台-MLFlow。 谈起Databrick,相信即使是不熟悉机器学习和大数据的工程湿们也都有所了解,它由Spark的...

naughty
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部