Collections.sort(List list, Comparator c)方法理解


 
 1   public static <T> void sort(List<T> list, Comparator<? super T> c) {
 2       list.sort(c);
 3   }
 4  
 5   
 6     @SuppressWarnings({"rawtypes", "unchecked"})
 7     private static void mergeSort(Object[] src,
 8                                   Object[] dest,
 9                                   int low, int high, int off,
10                                   Comparator c) {
11         int length = high - low;
12 
13         // Insertion sort on smallest arrays
14         if (length < INSERTIONSORT_THRESHOLD) {
15             for (int i=low; i<high; i++)
16                 for (int j=i; j>low && c.compare(dest[j-1], dest[j])>0; j--)
17                     swap(dest, j, j-1);
18             return;
19         }
20  
21 public class ReplyComparator implements Comparator<Reply> { 22 @Override 23 public int compare(Reply o1, Reply o2) { 24 if(isAllNumber(o1.getContent()) && isAllNumber(o2.getContent())){ 25 return Integer.valueOf(o1.getContent()).compareTo(Integer.valueOf(o2.getContent())); 26 } 27 return o1.getContent().compareTo(o2.getContent()); 28 } 29 30 private boolean isAllNumber(String content){ 31 String regex = "^[0-9]*$"; 32 Pattern pattern = Pattern.compile(regex); 33 Matcher matcher = pattern.matcher(content); 34 if(matcher.matches()){ 35 return true; 36 } 37 return false; 38 } 39 } 40 41 42 Collections.sort(result,new ReplyComparator());

 

 

 


对result 排序,Comparator接口的compare方法参数: Reply o1, Reply o2 01代表index = x 的对象, 02是index = x+1;
这个方法返回正数,则会交换o1,o2的位置,<=0时,则不会交换。
mergeSort 是Collections.sort方法内部调用的Arrays类的方法,第16行的条件 c.compare(dest[j-1], dest[j])>0可知 
只有Comparator接口的compare方法返回正数,才会交换o1,o2的位置(o1的索引小于o2的索引),如果不希望交换位置,则返回负数或0。
也就是说要想从大到小排序判定条件 if(o1>o2)【可为o对象某个属性的比较】 return -1(小于等于0);
要想从小到大排序 if(o1>o2) return 1(大于0);




String.compareTo(String anotherString)
String a = "abc";
String b = "abcde"
a.compareTo(b) 返回 a.lenth -b.lenth 也就是b大

String a = "bac";
String b = "abc";
a.compareTo(b) 返回 ‘b’ -'a' (>0 ) 也就是a大


a.compareTo(b)  返回正数 则a大, 返回负数,a小,返回0相等



 
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM