分享

用Java集合中的Collections.sort方法对list排序的两种方法

 GreatStep 2014-02-13

第一种是list中的对象实现Comparable接口,如下:

01 /**
02 * 根据order对User排序
03 */
04 public class User implements Comparable
05        
06        
07        
08        
09      <USER>
10         
11         
12         
13         
14       {
15     private String name;
16     private Integer order;
17     public String getName() {
18         return name;
19     }
20     public void setName(String name) {
21         this.name = name;
22     }
23     public Integer getOrder() {
24         return order;
25     }
26     public void setOrder(Integer order) {
27         this.order = order;
28     }
29     public int compareTo(User arg0) {
30         return this.getOrder().compareTo(arg0.getOrder());
31     }
32 }
33        
34        
35        
36        
37      </USER>

测试一下:
01 public class Test{
02   
03     public static void main(String[] args) {
04         User user1 = new User();
05         user1.setName("a");
06         user1.setOrder(1);
07         User user2 = new User();
08         user2.setName("b");
09         user2.setOrder(2);
10         List
11        
12        
13        
14        
15      <USER>
16         
17         
18         
19         
20        list = new ArrayList
21         
22         
23         
24         
25       <USER>
26          
27          
28          
29          
30        ();
31         //此处add user2再add user1
32         list.add(user2);
33         list.add(user1);
34         Collections.sort(list);
35         for(User u : list){
36             System.out.println(u.getName());
37         }
38     }
39 }
40         
41         
42         
43         
44       </USER>
45        
46        
47        
48        
49      </USER>

输出结果如下
a
b

第二种方法是根据Collections.sort重载方法来实现,例如:
01 /**
02 * 根据order对User排序
03 */
04 public class User { //此处无需实现Comparable接口
05     private String name;
06     private Integer order;
07     public String getName() {
08         return name;
09     }
10     public void setName(String name) {
11         this.name = name;
12     }
13     public Integer getOrder() {
14         return order;
15     }
16     public void setOrder(Integer order) {
17         this.order = order;
18     }
19 }

主类中这样写即可:
01 public class Test{
02     public static void main(String[] args) {
03         User user1 = new User();
04         user1.setName("a");
05         user1.setOrder(1);
06         User user2 = new User();
07         user2.setName("b");
08         user2.setOrder(2);
09         List
10        
11        
12        
13        
14      <USER>
15         
16         
17         
18         
19        list = new ArrayList
20         
21         
22         
23         
24       <USER>
25          
26          
27          
28          
29        ();
30         list.add(user2);
31         list.add(user1);
32           
33         Collections.sort(list,new Comparator
34          
35          
36          
37          
38        <USER>
39           
40           
41           
42           
43         (){
44             public int compare(User arg0, User arg1) {
45                 return arg0.getOrder().compareTo(arg1.getOrder());
46             }
47         });
48         for(User u : list){
49             System.out.println(u.getName());
50         }
51     }
52 }
53          
54          
55          
56          
57        </USER>
58         
59         
60         
61         
62       </USER>
63        
64        
65        
66        
67      </USER>

输出结果如下
a
b

前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁

多字段的场合:
01 Collections.sort(list,new Comparator
02         
03         
04         
05         
06       <USER>
07          
08          
09          
10          
11        (){
12             public int compare(User arg0, User arg1) {
13  //            第一次比较专业
14                 int i = arg0.getOrder().compareTo(arg1.getOrder());
15   
16 //            如果专业相同则进行第二次比较
17             if(i==0){
18 //                第二次比较
19                 int j=arg0.getXXX().compareTo(arg1.getXXX());
20 //                如果学制相同则返回按年龄排序
21                 if(j==0){
22                     return arg0.getCCC().compareTo(arg1.getCCC());
23                 }
24                 return j;
25             }
26             return i;
27             }
28         });
29         
30         
31         
32         
33       </USER>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多