用Java集合中的Collections.sort方法对list排序的两种方法
  fMcd99JWoYyG 2023年11月02日 43 0


用Collections.sort方法对list排序有两种方法

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

 

 

	<strong>/**
02	* 根据order对User排序
03	*/
04	public class User implements 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	    public int compareTo(User arg0) {
20	        return this.getOrder().compareTo(arg0.getOrder());
21	    }
22	}
23	</strong>

测试一下:

 


输出结果如下
a

 


第二种方法是根据Collections.sort重载方法来实现,例如:

 



	<strong>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 list = new ArrayList();
11	        //此处add user2再add user1
12	        list.add(user2);
13	        list.add(user1);
14	        Collections.sort(list);
15	        for(User u : list){
16	            System.out.println(u.getName());
17	        }
18	    }
19	}</strong>
=

view source

 

	<strong>/**
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	}</strong>


主类中这样写即可:

 

 

	<strong>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 list = new ArrayList();
10	        list.add(user2);
11	        list.add(user1);
12	         
13	        Collections.sort(list,new Comparator(){
14	            public int compare(User arg0, User arg1) {
15	                return arg0.getOrder().compareTo(arg1.getOrder());
16	            }
17	        });
18	        for(User u : list){
19	            System.out.println(u.getName());
20	        }
21	    }
22	}
23	</strong>
 


 

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

多字段的场合: 


<strong>Collections.sort(list,new Comparator(){
02	            public int compare(User arg0, User arg1) {
03	 //            第一次比较专业
04	                int i = arg0.getOrder().compareTo(arg1.getOrder());
05	 
06	//            如果专业相同则进行第二次比较
07	            if(i==0){
08	//                第二次比较
09	                int j=arg0.getXXX().compareTo(arg1.getXXX());
10	//                如果学制相同则返回按年龄排序
11	                if(j==0){
12	                    return arg0.getCCC().compareTo(arg1.getCCC());
13	                }
14	                return j;
15	            }
16	            return i;
17	            }
18	        });
19	 
20	</strong>
 
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  kG7ef0NqClb6   2023年11月13日   15   0   0 java
  u2N3sQ7nC0dn   2023年11月13日   13   0   0 java
  rCd1NYtlhh0U   2023年11月13日   12   0   0 java
  rCd1NYtlhh0U   2023年11月13日   19   0   0 java
  bSubxmxwEKmm   2023年11月13日   14   0   0 java
fMcd99JWoYyG