最近编写Comparator经常抛出异常,促使我较深入学习下Java的Comparator。本文介绍。。。
待整理。。。。。
Comparator是Java的一个接口,官方文档见这里Interface Comparator<T>。
Comparator最常这用使用:Collections.sort和Arrays.sort
//Arrays.sort public static <T> void sort(T[] a, Comparator<? super T> c) //Collections.sort public static <T> void sort(List<T> list, Comparator<? super T> c) //举例 Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { //实现compare函数 Message m1 = (Message)o1; Message m2 = (Message)o2; double diff = m1.getReceiveTime() - m2.getReceiveTime(); return (diff==0 ? 0 : (diff>0 ? 1 : -1)); } });
new Comarator默认是升序的。。。。
使用规则:
编写Comparator,需要符合一定的规则,否则会抛出异常。
如果在排序时要实现第一域相等,则按等二个域排序(Excel常用的一个数据排序功能),其实也不难,见如下例子(例子来源于StackOverflow,点这里)。
public class Person { private String firstName; private String lastName; private String age; } public int compareTo(Person p1, Person p2) { int i = p1.firstName.compareTo(p2.firstName); if (i != 0) return i; i = p2.lastName.compareTo(p2.lastName); //若First name相等,则比较last name if (i != 0) return i; return Integer.valueOf(p1.age).compareTo(Integer.valueOf(p2.age); //名和姓都相等,则按年龄排序 }
总之,只要符合上面的规则,怎么排序都可以。
我很好奇的是,如果不按上面方法,多个域排序,两个域相等,那他们的顺序取决于什么?
赞赏微信赞赏
支付宝赞赏