文档章节

Java 排序Comparator的实践

刘付kin
 刘付kin
发布于 2016/12/07 11:06
字数 552
阅读 6
收藏 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
博文 98
码字总数 71383
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

docker run 创建一个新的容器并运行一个命令

docker run常用命令 docker run :创建一个新的容器并运行一个命令 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 1.OPTIONS说明 -t:为容器重新分配一个伪输入终端,通常与 -i 同时使...

lwenhao
20分钟前
1
0
安装Win出现无法创建新的分区也找不到现有的分区解决方案

无法创建新的分区也找不到现有的分区 ### 首先在安装界面按下 Shift+F10### 在出现的CMD界面输入: diskpart 进入磁盘管理工具diskpart### 可以输入 : list disk 查看磁盘列表l...

Kxvz
23分钟前
1
0
关于 @ngrx/Store 下 obj 的扩展问题

昨天做 task 的时候,遇到了一个问题。 TypeError: can't define property "x": "obj" is not extensible 而我的代码是 public txTiles: Array<TransactionFilterTile>; constructor(priv......

IrisHuang
25分钟前
1
0
presto内存管理及调优

内存池 Presto有三种内存池,分别为GENERAL_POOL、RESERVED_POOL、SYSTEM_POOL。这三个内存池占用的内存大小是由下面算法进行分配的: builder.put(RESERVED_POOL, new MemoryPool(RESERVED...

张欢19933
26分钟前
1
0
Mysql5.7服务版安装

步骤1: 勾选同意协议 步骤2:选择Server only模式 步骤3:选择安装目录 步骤4:执行文件 步骤5:端口号与用户配置 步骤6:选择标准系统用户 Finish后,安装完成。...

lyle_luo
26分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部