当需要排序的集合或数组不是单纯的数字类型的时候,通常可以使用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. }