关于Comparator的使用

排序的算法是我们最常用的算法,初学程序,每个人都尝试过排序。但只是局限于简单的排序。 
如将下列数字进行排序 
1,3,5,8,3,6 
于是我们得出结果 
1,3,3,5,6,8 
将下列字母(字符)进行排序 
a,i,e,f,w,s 
于是我们得出结果 
a,e,f,i,s,w 
但是我们遇到的情况就不是如此简单了。如给公司里的商品进行排序,我们很轻易的想到按照商品的名称排序不就完了,而且简单明了。但现实并如我们相信般简单。同一商品名称可以有不同的批次,进货时间,可能还会有单价的不同。显然只根据商品名称排序是不合理的。 

再举个简单例子然后用程序实现。如公司要将员工进行排序(不要说领导排在前面),假设我们的需求比较复杂。先进行姓排序,谁的姓拼音靠前,谁就排前面。然后对名字进行排序。恩.如果同名,女性排前头。如果名字和性别都相同,年龄小的排前头。ok,一个也不算复杂的需求。 

如果对java比较熟悉的会知道java.util.Comparator  接口。要实现里面的函数 
int compare(Object o1, Object o2) 返回一个基本类型的整型,返回负数表示o1 小于o2,返回0 表示o1和o2相等,返回正数表示o1大于o2。 

下面来举个比较简单的例子来看看Comparator的用法

首先,我们写一个Person类

package com.test;

/**
 *人
 */
public class Person {

	/**
	 * 人名
	 */
	private String name;
	/**
	 * 年龄
	 */
	private Integer age;

	public String getName() {
		return name;
	}

	public Person(Integer age, String name) {
		super();
		this.age = age;
		this.name = name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

}

 接下来写一个年龄比较器

package com.test;

import java.util.Comparator;

/**
 * 年龄比较器
 */
public class AgeComparator implements Comparator {

	public int compare(Object obj1, Object obj2) {
		// TODO Auto-generated method stub
		Person per1 = (Person) obj1;
		Person per2 = (Person) obj2;
		return per1.getAge() - (per2.getAge());
	}
}

 最后写一个测试类来测试这个方法

package com.test;

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

public class TestMain {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List personList = new ArrayList();//保存person
		personList.add(new Person(1, "Jack"));
		personList.add(new Person(5, "Tom"));
		personList.add(new Person(6, "Ann"));
		personList.add(new Person(12, "Jim"));
		personList.add(new Person(2, "Ruby"));
		personList.add(new Person(3, "Petter"));

		/**
		 * 调用Collections的sort方法排序
		 */
		 Collections.sort(personList, new AgeComparator());
		for (int i = 0; i < personList.size(); i++) {
			Person per = (Person) personList.get(i);
			System.out.println("年龄:" + per.getAge() + " "+"姓名:" + per.getName());
		}
	}
}

 

最后通过运行测试类

得到下面结果

年龄:1 姓名:Jack

年龄:2 姓名:Ruby

年龄:3 姓名:Petter

年龄:5 姓名:Tom

年龄:6 姓名:Ann

年龄:12 姓名:Jim

我们可以看出程序以及帮我们进行了排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值