排序的算法是我们最常用的算法,初学程序,每个人都尝试过排序。但只是局限于简单的排序。]如将下列数字进行排序
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