当需要排序的集合或数组不是单纯的数字类型的时候,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。

Comparator和Comparable的区别如下:

Comparable用在对象本身,说明这个对象是可以被比较的,也就是说可以被排序的。(String和Integer之所以可以比较大小,是因为它们都实现了Comparable接口,并实现了compareTo()方法)。

Comparator用在对象外面,相当于定义了一套排序算法来排序。

下面通过具体的例子来理解Comparator和Comparable的区别:

 

Comparable

1. package
2.   
3. import
4.   
5. public class User implements
6.   
7. private
8. private int
9.   
10. public User(String id, int
11. this.id = id;  
12. this.age = age;  
13.     }  
14.   
15. public int
16. return
17.     }  
18.   
19. public void setAge(int
20. this.age = age;  
21.     }  
22.   
23. public
24. return
25.     }  
26.   
27. public void
28. this.id = id;  
29.     }  
30.   
31. @Override
32. public int
33. return this.age - ((User) o).getAge();  
34.     }  
35.   
36. /**
37.      * 测试方法
38.      */
39. public static void
40. new User[] { new User("a", 30), new User("b", 20) };  
41.         Arrays.sort(users);  
42. for (int i = 0; i < users.length; i++) {  
43.             User user = users[i];  
44. " "
45.         }  
46.     }  
47. }


Comparator


1. package
2.   
3. import
4. import
5.   
6. public class MyComparator implements
7.   
8. @Override
9. public int
10. return
11.     }  
12.   
13. private int
14.         String str = (String) o;  
15. "一", "1");  
16. "二", "2");  
17. "三", "3");  
18. return
19.     }  
20.   
21. /**
22.      * 测试方法
23.      */
24. public static void
25. new String[] { "一", "三", "二"
26. new
27. for (int i = 0; i < array.length; i++) {  
28.             System.out.println(array[i]);  
29.         }  
30.     }  
31. }