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

fmms 12年前
     <div class="BlogContent TextContent">     <div class="cnt">      <p><strong>用Collections.sort方法对list排序有两种方法<br /> 第一种是list中的对象实现Comparable接口,如下:</strong><br /> </p>      <pre class="brush:java; toolbar: true; auto-links: false;">/** * 根据order对User排序 */ public class User implements Comparable                              <user>                                   {     private String name;     private Integer order;     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     }     public Integer getOrder() {         return order;     }     public void setOrder(Integer order) {         this.order = order;     }     public int compareTo(User arg0) {         return this.getOrder().compareTo(arg0.getOrder());     } }                              </user></pre>      <br /> 测试一下:      <br />      <pre class="brush:java; toolbar: true; auto-links: false;">public class Test{      public static void main(String[] args) {         User user1 = new User();         user1.setName("a");         user1.setOrder(1);         User user2 = new User();         user2.setName("b");         user2.setOrder(2);         List                              <user>                                    list = new ArrayList                                   <user>                                        ();         //此处add user2再add user1         list.add(user2);         list.add(user1);         Collections.sort(list);         for(User u : list){             System.out.println(u.getName());         }     } }                                   </user>                              </user></pre>      <br /> 输出结果如下      <br />      <strong>a<br /> b</strong>      <br />      <strong>第二种方法是根据Collections.sort重载方法来实现,例如:</strong>      <br />      <pre class="brush:java; toolbar: true; auto-links: false;">/** * 根据order对User排序 */ public class User { //此处无需实现Comparable接口     private String name;     private Integer order;     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     }     public Integer getOrder() {         return order;     }     public void setOrder(Integer order) {         this.order = order;     } }</pre>      <br /> 主类中这样写即可:      <br />      <pre class="brush:java; toolbar: true; auto-links: false;">public class Test{     public static void main(String[] args) {         User user1 = new User();         user1.setName("a");         user1.setOrder(1);         User user2 = new User();         user2.setName("b");         user2.setOrder(2);         List                              <user>                                    list = new ArrayList                                   <user>                                        ();         list.add(user2);         list.add(user1);                  Collections.sort(list,new Comparator                                        <user>                                             (){             public int compare(User arg0, User arg1) {                 return arg0.getOrder().compareTo(arg1.getOrder());             }         });         for(User u : list){             System.out.println(u.getName());         }     } }                                        </user>                                   </user>                              </user></pre>      <br /> 输出结果如下      <br />      <strong>a<br /> b</strong>      <br /> 前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁      <br />      <br /> 多字段的场合:      <br />      <strong><pre class="brush:java; toolbar: true; auto-links: false;">Collections.sort(list,new Comparator                                   <user>                                        (){             public int compare(User arg0, User arg1) {  //            第一次比较专业                 int i = arg0.getOrder().compareTo(arg1.getOrder());  //            如果专业相同则进行第二次比较             if(i==0){ //                第二次比较                 int j=arg0.getXXX().compareTo(arg1.getXXX()); //                如果学制相同则返回按年龄排序                 if(j==0){                     return arg0.getCCC().compareTo(arg1.getCCC());                 }                 return j;             }             return i;             }         });                                   </user></pre></strong>      <p></p>     </div>    </div>