您的位置:首页 > 其它

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

2015-10-02 22:24 731 查看
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


第二种方法
是根据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;
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: