Comparator实现排序

转自:Comparator实现排序

在java.util包中有一个Collections类,里面实现了对列表排序的功能,提供了一个静态方法sort方法,接收一个列表和一个Comparator接口的实例
实现的大致步骤如下:
1,先把列表转换为数组
2,通过Arrays的sort方法对数组排序,传入Comparator接口的实例
3,然后再把排好序的数组的数值设置到原来的列表对象中去
如果Comparator接口的compare方法返回一个小于0的数,表示被比较的两个对象中,前者小于后者
见下面的实例
要排序的对象:

package collectionsSort;
//用户数据的模型
public class UserModel {

	private String userName,userId;
	private int age;
	public String getUserName() {
		return userName;
	}
	public String getUserId() {
		return userId;
	}
	public int getAge() {
		return age;
	}
	public UserModel(String userName, String userId, int age) {
		this.userName = userName;
		this.userId = userId;
		this.age = age;
	}
	
	public String toString(){
		return "userName="+userName+",userId="+userId+",age="+age;
	}
}

 排序的测试端

 

package collectionsSort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

//直接使用Collections来排序
public class Client {

	public static void main(String[] args) {
//     准备要测试的数据
		UserModel um1 = new UserModel("u1","user1",21);
		UserModel um2 = new UserModel("u2","user2",24);
		UserModel um3 = new UserModel("u3","user3",25);
		UserModel um4 = new UserModel("u4","user4",22);
		
		//添加到列表中
		List<UserModel> list = new ArrayList<UserModel>();
		list.add(um1);
		list.add(um2);
		list.add(um3);
		list.add(um4);
		
		System.out.println("排序前-------------");
		printList(list);
		
		//实现比较器,也可以单独用一个类来实现
		Comparator c = new Comparator(){

			@Override
			public int compare(Object arg0, Object arg1) { //这里实现按照用户年龄大小来排序

			UserModel temp1 = (UserModel) arg0;
			UserModel temp2 = (UserModel) arg1;
			
			if(temp1.getAge()>temp2.getAge())return 1;
			else if(temp1.getAge()<temp2.getAge())return -1;
			else if(temp1.getAge()==temp2.getAge())return 0;
			return 0;
			}
			
		};
		
		//排序,主要就是依靠Comparator接口的具体实现
		Collections.sort(list,c);
		
		System.out.println("排序后-------------");
		printList(list);
		
	}

	private static void printList(List<UserModel> list) {
		for(UserModel um:list){
			System.out.println(um);
		}
	}

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值