排序的算法是我们最常用的算法,初学程序,每个人都尝试过排序。但只是局限于简单的排序。]如将下列数字进行排序
1,3,5,8,3,6
于是我们得出结果
1,3,3,5,6,8
将下列字母(字符)进行排序
a,i,e,f,w,s
于是我们得出结果
a,e,f,i,s,w
但是我们实际遇到的情况就不是如此简单了。如给公司里的商品进行排序,我们很轻易的想到按照商品的名称排序不就完了,而且简单明了。但现实并如我们相信般简单。同一商品名称可以有不同的批次,进货时间,可能还会有单价的不同。显然只根据商品名称排序是不合理的。
再举个简单例子。如公司要将员工进行排序(不要说领导排在前面),假设我们的需求比较复杂。先进行姓排序,谁的姓拼音靠前,谁就排前面。然后对名字进行排序。恩.如果同名,女性排前头。如果名字和性别都相同,年龄小的排前头。
1. // 待比较的用户类
2. public class User {
3. //首先年龄排序,如果年龄相同,则按名字排序
4. String name;
5. String age;
6.
7. public User(String name, String age) {
8. this.name = name;
9. this.age = age;
10. }
11.
12. public String getAge() {
13. return age;
14. }
15.
16. public void setAge(String age) {
17. this.age = age;
18. }
19.
20. public String getName() {
21. return name;
22. }
23.
24. public void setName(String name) {
25. this.name = name;
26. }
27. }
1. //具体的比较类,实现Comparator接口
2. import java.util.Comparator;
3.
4. public class ComparatorUser implements Comparator {
5.
6. public int compare(Object arg0, Object arg1) {
7. User user0 = (User) arg0;
8. User user1 = (User) arg1;
9.
10. // 首先比较年龄,如果年龄相同,则比较名字
11. int flag = user0.getAge().compareTo(user1.getAge());
12. if (flag == 0) {
13. return user0.getName().compareTo(user1.getName());
14. } else {
15. return flag;
16. }
17. }
18. }
1. import java.util.ArrayList;
2. import java.util.Collections;
3. import java.util.List;
4.
5. //测试类
6. public class SortTest {
7.
8. public static void main(String[] args) {
9. List userlist = new ArrayList();
10. userlist.add(new User("dd", "4"));
11. userlist.add(new User("aa", "1"));
12. userlist.add(new User("ee", "5"));
13. userlist.add(new User("bb", "2"));
14. userlist.add(new User("ff", "5"));
15. userlist.add(new User("cc", "3"));
16. userlist.add(new User("gg", "6"));
17.
18. ComparatorUser comparator = new ComparatorUser();
19. Collections.sort(userlist, comparator);
20.
21. for (int i = 0; i < userlist.size(); i++) {
22. User user_temp = (User) userlist.get(i);
23. System.out.println(user_temp.getAge() + "," + user_temp.getName());
24. }
25. }
26. }
输出结果:
1, aa
2, bb
3, cc
4, dd
5, ee //注意:同样是5岁的人,则比较名字(ee,ff),然后排序
5, ff
6, gg