如何使用Comparator比较接口实现ArrayList集合排序
作者:惟念依
这篇文章主要介绍了如何使用Comparator比较接口实现ArrayList集合排序问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
使用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; } } }
运行结果为:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。