亲宝软件园·资讯

展开

如何使用Comparator比较接口实现ArrayList集合排序

惟念依 人气:0

使用Comparator比较接口实现排序

Comparator是比较接口,当我们需要对某个类进行排序而此类本身没有时Comparable时,我们可以建立一个该类的比较器来实现Comparator接口即可实现排序。

Comparator接口定义如下

	public interface Comparator<T>{
		int compara(T o1 ,T o2);
		boolean equals(Object obj);
	}

备注:若实现Comparator接口,必须实现compara(T o1,To2)函数,但可以不实现equals函数。

例子:

我们定义一个“person”类

	public class person {
	
	private String name;  //姓名
	private int age;	  //年纪
	
	//构造函数
	public person(String get_name , int get_age) {
		this.name = get_name;
		this.age = get_age;
	}
	
	public int get_age() {
		return this.age;
	}
	
	public String get_name() {
		return this.name;
	}
	
}

创建按年龄排序的比较器实现Comparator接口

	//创建根据年龄排序的比较器	
	public class compare_byAge implements Comparator<person> {
			
			//重写compare方法
			@Override
			
			//此处为按年龄升序排序
			public int compare(person o1, person o2) {
				if(o1.get_age() > o2.get_age() ) {
					return 1;
				}
				else if(o1.get_age() == o2.get_age()) {
					return 0;
				}	
				else {
					return -1;
				}
			}

	}

使用ArrayList进行排序测试

	public class test {

	public static void main(String[] args) {
		
		//创建person对象
		person p1 = new person("li",15);
		person p2 = new person("ping",18);
		person p3 = new person("liao",13);
		person p4 = new person("long",23);
		person p5 = new person("xu",12);
		
		//创建peson类的ArrayList集合
		ArrayList<person> per = new ArrayList<person>();
		
		//将实例化的person对象加入到ArrayList集合中
		per.add(p1);
		per.add(p2);
		per.add(p3);
		per.add(p4);
		per.add(p5);
		
		//排序前的顺序(其实就是按照插入顺序)
		System.out.println("排序前:");
		for(int i =0;i<per.size();i++) {
			System.out.println(per.get(i).get_age()+"	"+per.get(i).get_name());
		}
		
		System.out.println();
		
		//用Collection.sort()排序
		Collections.sort(per,new compare_byAge());
		
		System.out.println("排序后:");
		for(int i =0;i<per.size();i++) {
			System.out.println(per.get(i).get_age()+"	"+per.get(i).get_name());
		}
	}

}

输出结果:

以名字长度排序的Comparator比较器

	
	//设置以名字长度为判断标准的比较器
	public class compare_bynameLen implements Comparator<person> {
	
	public int compare(person o1, person o2) {
		
		//按名字长度升序排序
		if(o1.get_name().length() > o2.get_name().length()) {
			
			return 1;      
			
		}
		
		//名字长度相同的情况下按照年龄升序排序
		else if( o1.get_name().length() == o2.get_name().length() ) {
			if(o1.get_age() > o2.get_age() ) {
				return 1;
			}
			else if(o1.get_age() == o2.get_age()) {
				return 0;
			}	
			else {
				return -1;
			}
		}
		
		else {
			return -1;
		}
		
	}
}

运行结果为:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

加载全部内容

相关教程
猜你喜欢
用户评论