java 集合的排序

首先说下List的排序吧,排序有两种实现的方法,一种是实现Comparable接口,重写重写int compareTo(Object o)方法,另一种是比较器类实现Comparator接口,重写int compare(Object o1, Object o2)方法。

第一种使用实现Comparable接口的实现方法:

//直接在需要实现排序的类实现Comparable接口,实现里面的compare方法
public class StudentDTO implements Comparable {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    @Override
    public int compareTo(Object o) {
        StudentDTO sdto = (StudentDTO) o;
        int otherAge = sdto.getAge();
        return this.age-(otherAge);
    }
}
//只需要把list集合调用下Collections里面的排序的方法就好了
Collections.sort(studentList);  //按照age升序 22,23,
Collections.reverse(studentList);  //按照age降序 23,22  

第二种是自定义比较器的形式:

//自定义比较器
class MyCompartor implements Comparator
{
     @Override
     public int compare(Object o1, Object o2)
    {
           StudentDTO sdto1= (StudentDTO )o1;
           StudentDTO sdto2= (StudentDTO )o2;
           return sdto1.getAge.compareTo(stdo2.getAge())
    }
}

//排序的时候只需要把这个比较器传进去就可以进行排序了,第一个参数数是需要排序的list,第二个参数是自定义的比较器
MyCompartor mc = new MyCompartor ();
Collections.sort(studentList,mc);     //按照age升序 22,23,
Collections.reverse(studentList,mc);    //按照age降序 23,22   

如果使用的是treeset集合的话也是这两个比较器,只是调用的方式不一样,对于第一种继承Comparable接口的,在使用treeset的时候不需要做其他的事情,只需要把需要比较的类直接放到treeset集合中就可以了,如果是第二种使用比较器的话,也是需要自定义比较器,在new TreeSet(new CompareImpl());把比较器作为参数传进去就可以以了
注意:比较相等的实体将不会被加入到集合中去

你可能感兴趣的:(java)