如何使用Collections.sort对List排序

针对集合元素排序,在项目中还是比较常见,最近因为项目中有遇到,总结如下:

对List元素排序实现方法大家都知道用Collections.sort();首先给大家介绍一下Comparable与Comparator的接口的区别。

1.Comparable是对象内部需要实现的接口,如果一个对象要想用利用Array.sort进行排序,那么这个对象必须实现Comparable的接口,比较的实现规则是在对象的内部进行的,然后直接调用Collections.sort()即可。

2.Comparator接口是在对象外实现的接口,主要是方便了对没有实现Comparable接口的对象的比较和排序,比如:当我们对已经有的 一个类进行排序的时候,这个类又没有实现Comparable接口,那么我们可以利用Collections.sort(list,mew Comparator<?>(){})来排序,同时实现一个 Comparator接口实现对这个类的排序。

以下两个例子分别详细说明:实现对User类先按照名字字母先后顺序排序,名字相同情况下,再按照年龄大小排序

测试代码如下:

1、在对象内部实现具体的排序规则
User类:
public class User implements Comparable<Object>{
	//年龄
	private Integer age;
	//名字
	private String name;

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

    //排序方法内部实现
	@Override
	public int compareTo(Object o) {
		User user = (User)o;
		//step1、先按照名字字母顺序排序 
		if(this.getName() != null && user.getName() != null 
				&& 0 != this.getName().compareTo(user.getName())){
			return this.getName().compareTo(user.getName());
		}else{
			 //step2、 针对名字相同的再按照然后按照年龄大小排序
			if (this.getAge() != null && user.getAge() != null) {
				return this.getAge() - user.getAge();
			}
			return 0;
		}
	}

}

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class TestUserSort {
	
	public TestUserSort(){
		
	}
	
	//sort实现按照名字、年龄大小排序
	public static List<User> sortUser(){
		List<User> userList = new ArrayList<User>();
		String[] nameArry = {"ab","ccddd","ab","cd","faaa","ab"};
		Integer[] ageArry = {3,6,9,4,7,1};
		for(int i=0;i<6;i++){
			User user = new User();
			user.setName(nameArry[i]);
			user.setAge(ageArry[i]);
			userList.add(user);
		}
		return userList;
	} 

	public static void main(String[] args){
		List<User> userList = sortUser();
		Collections.sort(userList);
		
		for(User us : userList){
			System.out.println(us.getName()+"的年龄是:"+us.getAge());
		}
		
	}

}


2、在对象外部实现具体的排序规则(推荐使用)

User类:
public class User{
    //年龄
    private Integer age;
    //名字
    private String name;

    
    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Comparator;

public class TestUserSort {
	
	public TestUserSort(){
		
	}
	
	//sort实现按照名字、年龄大小排序
	public static List<User> sortUser(){
		List<User> userList = new ArrayList<User>();
		String[] nameArry = {"ab","ccddd","ab","cd","faaa","ab"};
		Integer[] ageArry = {3,6,9,4,7,1};
		for(int i=0;i<6;i++){
			User user = new User();
			user.setName(nameArry[i]);
			user.setAge(ageArry[i]);
			userList.add(user);
		}
		return userList;
	} 

	public static void main(String[] args){
		List<User> userList = sortUser();
		Collections.sort(userList, new Comparator<User>(){
			public int compare(User o1,User o2){
				//step1、先按照名字字母顺序排序 
				if(o1.getName() != null && o2.getName() != null 
						&& 0 != o1.getName().compareTo(o2.getName())){
					return o1.getName().compareTo(o2.getName());
				}else{
					 //step2、 针对名字相同的再按照然后按照年龄大小排序
					if (o1.getAge() != null && o2.getAge() != null) {
						return o1.getAge() - o2.getAge();
					}
					return 0;
				}
			}
			
		});
		
		for(User us : userList){
			System.out.println(us.getName()+"的年龄是:"+us.getAge());
		}
		
	}

}


两种方法运行结果:
ab的年龄是:1
ab的年龄是:3
ab的年龄是:9
ccddd的年龄是:6
cd的年龄是:4
faaa的年龄是:7

你可能感兴趣的:(comparable,comparator)