java基础——Collections.sort的两种用法

Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式:

    public static <T extends Comparable<? super T>> void sort(List<T> list) {
        list.sort(null);
    }

    public static <T> void sort(List<T> list, Comparator<? super T> c) {
        list.sort(c);
    }


    首先使用基本类型(此处使用Integer)来演示第一个方法:
    static List<Integer> intList = Arrays.asList(2, 3, 1);
    //正序 
    Collections.sort(intList);
    //倒叙
    Collections.sort(intList,new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                // 返回值为int类型,大于0表示正序,小于0表示逆序
                return o2-o1;
            }
     });


    接下来看看自定义类的排序:

public class Emp{
    private int empno;
    private String ename;
    public int getEmpno() {
        return empno;
    }
    public void setEmpno(int empno) {
        this.empno = empno;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    
    public Emp(int empno, String ename) {
        super();
        this.empno = empno;
        this.ename = ename;
    }
    @Override
    public String toString()
    {
        return "empno:\t"+empno+"\tename:\t"+ename;
    }
}


   
    //定义的list
    static List<Emp> empList;
    static 
    {
        Emp emp1 = new Emp(2,"Guan YunChang");
        Emp emp2 = new Emp(3,"Zhang Fei");
        Emp emp3 = new Emp(1,"Liu Bei");
        empList = Arrays.asList(emp1,emp2,emp3);
    }
    
    //实现排序的方法
    Collections.sort(empList,new Comparator<Emp>() {
            @Override
            public int compare(Emp o1, Emp o2) {
                /*按员工编号正序排序*/
                return o1.getEmpno()-o2.getEmpno();
                /*按员工编号逆序排序*/
                //return o2.getEmpno()-o1.getEmpno();
                /*按员工姓名正序排序*/
                //return o1.getEname().compareTo(o2.getEname());
                /*按员工姓名逆序排序*/
                //return o2.getEname().compareTo(o1.getEname());
            }
     });



    如果直接使用 Collections.sort(empList);需要在Emp类中实现Comparator接口
public class Emp implements Comparable<Emp>{
    private int empno;
    private String ename;
    public int getEmpno() {
        return empno;
    }
    public void setEmpno(int empno) {
        this.empno = empno;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    
    public Emp(int empno, String ename) {
        super();
        this.empno = empno;
        this.ename = ename;
    }
    @Override
    public String toString()
    {
        return "empno:\t"+empno+"\tename:\t"+ename;
    }

    @Override
    public int compareTo(Emp emp) {
        /*按员工编号正序排序*/
        //return this.getEmpno()-emp.getEmpno();
        /*按员工编号逆序排序*/
        //return emp.getEmpno()-this.getEmpno();
        /*按员工姓名正序排序*/
        //return this.getEname().compareTo(emp.getEname());
        /*按员工姓名逆序排序*/
        return emp.getEname().compareTo(this.getEname());
    }
   }


使用Collections.sort方法的第一种形式实现:
 Collections.sort(empList);

猜你喜欢

转载自hanxin0311.iteye.com/blog/2419575