Collections.sort() Comparat…

  排序的算法是我们最常用的算法,初学程序,每个人都尝试过排序。但只是局限于简单的排序。]如将下列数字进行排序
1,3,5,8,3,6
于是我们得出结果
1,3,3,5,6,8
将下列字母(字符)进行排序
a,i,e,f,w,s
于是我们得出结果
a,e,f,i,s,w
      但是我们实际遇到的情况就不是如此简单了。如给公司里的商品进行排序,我们很轻易的想到按照商品的名称排序不就完了,而且简单明了。但现实并如我们相信般简单。同一商品名称可以有不同的批次,进货时间,可能还会有单价的不同。显然只根据商品名称排序是不合理的。
      再举个简单例子。如公司要将员工进行排序(不要说领导排在前面),假设我们的需求比较复杂。先进行姓排序,谁的姓拼音靠前,谁就排前面。然后对名字进行排序。恩.如果同名,女性排前头。如果名字和性别都相同,年龄小的排前头。

    如果对java比较熟悉的会知道java.util.Comparator 接口。要实现里面的函数int compare(Object o1, Object o2) 返回一个基本类型的整型,返回负数表示o1 小于o2,返回0 表示o1和o2相等,返回正数表示o1大于o2。

  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.  
// 待比较的用户类
public class User {
    //首先年龄排序,如果年龄相同,则按名字排序
    String name;
    String age;

    public User(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  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.  
//具体的比较类,实现Comparator接口
import java.util.Comparator;

public class ComparatorUser implements Comparator {

        public int compare(Object arg0, Object arg1) {
                User user0 = (User) arg0;
                User user1 = (User) arg1;

                // 首先比较年龄,如果年龄相同,则比较名字
                int flag = user0.getAge().compareTo(user1.getAge());
                if (flag == 0) {
                        return user0.getName().compareTo(user1.getName());
                } else {
                        return flag;
                }
        }
}
  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 0; userlist.size(); i++)  
  22.             User user_temp (User) userlist.get(i);  
  23.             System.out.println(user_temp.getAge() "," user_temp.getName());  
  24.          
  25.      
  26.  
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

//测试类
public class SortTest {

        public static void main(String[] args) {
                List userlist = new ArrayList();
                userlist.add(new User("dd", "4"));
                userlist.add(new User("aa", "1"));
                userlist.add(new User("ee", "5"));
                userlist.add(new User("bb", "2"));
                userlist.add(new User("ff", "5"));
                userlist.add(new User("cc", "3"));
                userlist.add(new User("gg", "6"));

                ComparatorUser comparator = new ComparatorUser();
                Collections.sort(userlist, comparator);

                for (int i = 0; i < userlist.size(); i++) {
                        User user_temp = (User) userlist.get(i);
                        System.out.println(user_temp.getAge() + "," + user_temp.getName());
                }
        }
}
输出结果:

   1, aa
   2, bb
   3, cc
   4, dd
   5, ee                    //注意:同样是5岁的人,则比较名字(ee,ff),然后排序
   5, ff
   6, gg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值