Collections.sort方法(可以根据集合中类的属性的比较对集合内的类进行排序)

来源:互联网 发布:淘宝网黑盘羊沉香好吗 编辑:程序博客网 时间:2024/06/09 19:46
Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能;如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的。
compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。

Collections.sort(list, new Comparator(){重写的方法});的第二个参数返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对list进行排序。

第一种方法

user类

/*** 根据order对User排序*/public class User implements Comparable<user>{    private String name;    private Integer order;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getOrder() {        return order;    }    public void setOrder(Integer order) {        this.order = order;    }    public int compareTo(User arg0) {        return this.getOrder().compareTo(arg0.getOrder());    }}
测试类

Test

public class Test{    public static void main(String[] args) {        User user1 = new User();        user1.setName("a");        user1.setOrder(1);        User user2 = new User();        user2.setName("b");        user2.setOrder(2);        List<user> list = new ArrayList<user>();        //此处add user2再add user1        list.add(user2);        list.add(user1);        Collections.sort(list);        for(User u : list){            System.out.println(u.getName());        }    }}
输出结果如下 
a
b
 
第二种方法
是根据Collections.sort重载方法来实现

/*** 根据order对User排序*/public class User { //此处无需实现Comparable接口    private String name;
   //如果想对此属性进行compareTo的方法 用int 类型将不能实现必须使用其包装类型    private Integer order;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getOrder() {        return order;    }    public void setOrder(Integer order) {        this.order = order;    }}
具体测试类(片段)

Collections.sort(list,new Comparator(){            public int compare(User arg0, User arg1) {<span style="white-space:pre"></span>//第一次比较专业                int i = arg0.getOrder().compareTo(arg1.getOrder());<span style="white-space:pre"></span>//如果专业相同则进行第二次比较            if(i==0){
                //第二次比较              int j=arg0.getXXX().compareTo(arg1.getXXX());<span style="white-space:pre"></span>//如果学制相同则返回按年龄排序              if(j==0){                    return arg0.getCCC().compareTo(arg1.getCCC());                }                return j;            }            return i;            }        });



0 0
原创粉丝点击