首页 > 开发 > Java > 正文

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

2024-07-13 09:57:35
字体:
来源:转载
供稿:网友

用Collections.sort方法对list排序有两种方法 第一种是list中的对象实现Comparable接口,如下:

 

  1. /** 
  2. * 根据order对User排序 
  3. */ 
  4. public class User implements Comparable 
  5.        
  6.        
  7.        
  8.        
  9.      <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.      </user> 


测试一下:

 

  1. public class Test{ 
  2.   
  3.     public static void main(String[] args) { 
  4.         User user1 = new User(); 
  5.         user1.setName("a"); 
  6.         user1.setOrder(1); 
  7.         User user2 = new User(); 
  8.         user2.setName("b"); 
  9.         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.       </user> 
  44.        
  45.        
  46.        
  47.        
  48.      </user> 




输出结果如下
a
b
第二种方法是根据Collections.sort重载方法来实现,例如: 


 

  1. /** 
  2. * 根据order对User排序 
  3. */ 
  4. public class User { //此处无需实现Comparable接口 
  5.     private String name; 
  6.     private Integer order; 
  7.     public String getName() { 
  8.         return name; 
  9.     } 
  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.     } 


主类中这样写即可: 

 

  1. public class Test{ 
  2.     public static void main(String[] args) { 
  3.         User user1 = new User(); 
  4.         user1.setName("a"); 
  5.         user1.setOrder(1); 
  6.         User user2 = new User(); 
  7.         user2.setName("b"); 
  8.         user2.setOrder(2); 
  9.         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.        </user> 
  57.         
  58.         
  59.         
  60.         
  61.       </user> 
  62.        
  63.        
  64.        
  65.        
  66.      </user> 

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

多字段的场合: 

  1. Collections.sort(list,new Comparator 
  2.         
  3.         
  4.         
  5.         
  6.       <user> 
  7.          
  8.          
  9.          
  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> 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表