compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。
Collections.sort(list, new PriceComparator());的第二个参数返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对list进行排序。
一直都没有接触排序,突然要实现对List的排序,找了一下资料,发现Collections.sort( )这个方法。
Collections.sort( )分为两部分,一部分为排序规则,一部分为排序算法 。
规则用来判断对象,算法则考虑如何进行排序。
对于自定义对象,sort()不知道规则,所以无法比较,这种情况下一定要定义排序规则。方式有两种:
第一种,java.lang下面的一个接口:Comparable。可以让自定义对象实现一个Comparable接口,这个接口只有一个方法comparableTo(Object o)
其规则是当前对象与o对象进行比较,返回一个int值,系统根据此值进行排序。
如当前对象>o对象,则返回值>0;
如当前对象=o对象,则返回值=0;
如当前对象<o对象,则返回值<0;
第二种方式,java.util下有一个Comparator(比较器)。它拥有compare( )方法,用来比较两个对象。
至此,我采用了第二种方式。下面是定义的排序规则:
public class JsonComparator implements Comparator<NewRecordEntity>{
@Override
public int compare(NewRecordEntity arg0, NewRecordEntity arg1) {
String data1=TimeStamp2Date(arg0.getOldtime()+"", "yyyy-MM-dd HH:mm:ss");
String data2=TimeStamp2Date(arg1.getOldtime()+"", "yyyy-MM-dd HH:mm:ss");
//设定时间的模板
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//得到指定模范的时间
try {
Date d1 = sdf.parse(data1);
Date d2 = sdf.parse(data2);
if(d1.getTime() - d2.getTime()>0){
return -1;
}else if(d1.getTime() - d2.getTime()<0){
return 1;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
public String TimeStamp2Date(String timestampString, String formats){
Long timestamp = Long.parseLong(timestampString)*1000;
String date = new java.text.SimpleDateFormat(formats).format(new java.util.Date(timestamp));
return date;
}
}
使用:
//排序操作
JsonComparator pComparator = new JsonComparator();
Collections.sort(list, pComparator);
这样就实现了排序功能。如果是对数组进行排序,同样的原理,只不过换成Arrays.sort()方法。