Comparator列表排序

来源:互联网 发布:ubuntu 16.04网络配置 编辑:程序博客网 时间:2024/05/17 07:38

在java.util包中有一个Collections类,里面实现了对列表排序的功能,提供了一个静态方法sort方法,接收一个列表和一个Comparator接口的实例
实现的大致步骤如下:
1,先把列表转换为数组
2,通过Arrays的sort方法对数组排序,传入Comparator接口的实例
3,然后再把排好序的数组的数值设置到原来的列表对象中去
如果Comparator接口的compare方法返回一个小于0的数,表示被比较的两个对象中,前者小于后者
见下面的实例
要排序的对象:
Java代码 
1.package collectionsSort;  
2.//用户数据的模型  
3.public class UserModel {  
4. 
5.    private String userName,userId;  
6.    private int age;  
7.    public String getUserName() {  
8.        return userName;  
9.    }  
10.    public String getUserId() {  
11.        return userId;  
12.    }  
13.    public int getAge() {  
14.        return age;  
15.    }  
16.    public UserModel(String userName, String userId, int age) {  
17.        this.userName = userName;  
18.        this.userId = userId;  
19.        this.age = age;  
20.    }  
21.      
22.    public String toString(){  
23.        return "userName="+userName+",userId="+userId+",age="+age;  
24.    }  
25.} 
package collectionsSort;
//用户数据的模型
public class UserModel {

 private String userName,userId;
 private int age;
 public String getUserName() {
  return userName;
 }
 public String getUserId() {
  return userId;
 }
 public int getAge() {
  return age;
 }
 public UserModel(String userName, String userId, int age) {
  this.userName = userName;
  this.userId = userId;
  this.age = age;
 }
 
 public String toString(){
  return "userName="+userName+",userId="+userId+",age="+age;
 }
}
排序的测试端

Java代码 
1.package collectionsSort;  
2. 
3.import java.util.ArrayList;  
4.import java.util.Collections;  
5.import java.util.Comparator;  
6.import java.util.List;  
7. 
8.//直接使用Collections来排序  
9.public class Client {  
10. 
11.    public static void main(String[] args) {  
12.//     准备要测试的数据  
13.        UserModel um1 = new UserModel("u1","user1",21);  
14.        UserModel um2 = new UserModel("u2","user2",24);  
15.        UserModel um3 = new UserModel("u3","user3",25);  
16.        UserModel um4 = new UserModel("u4","user4",22);  
17.          
18.        //添加到列表中  
19.        List<UserModel> list = new ArrayList<UserModel>();  
20.        list.add(um1);  
21.        list.add(um2);  
22.        list.add(um3);  
23.        list.add(um4);  
24.          
25.        System.out.println("排序前-------------");  
26.        printList(list);  
27.          
28.        //实现比较器,也可以单独用一个类来实现  
29.        Comparator c = new Comparator(){  
30. 
31.            @Override 
32.            public int compare(Object arg0, Object arg1) { //这里实现按照用户年龄大小来排序  
33. 
34.            UserModel temp1 = (UserModel) arg0;  
35.            UserModel temp2 = (UserModel) arg1;  
36.              
37.            if(temp1.getAge()>temp2.getAge())return 1;  
38.            else if(temp1.getAge()<temp2.getAge())return -1;  
39.            else if(temp1.getAge()==temp2.getAge())return 0;  
40.            return 0;  
41.            }  
42.              
43.        };  
44.          
45.        //排序,主要就是依靠Comparator接口的具体实现  
46.        Collections.sort(list,c);  
47.          
48.        System.out.println("排序后-------------");  
49.        printList(list);  
50.          
51.    }  
52. 
53.    private static void printList(List<UserModel> list) {  
54.        for(UserModel um:list){  
55.            System.out.println(um);  
56.        }  
57.    }  
58. 
59.}