关于Collections中的sort方法的使用
在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标。
此排序被保证是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。
举个例子:
定义一个User类,内有name和score两个属性。
定义一个ArryList,其内部元素为User对象,如何按照User的score进行升序排序?
//声明User类型
public class User {
public String name;
public int score;
public User(String name,int score)
{
this.name =name;
this.score = score;
}
}
//按照User对象的score进行排序,升序排序。需要继承Comparator接口
public class comparator implements Comparator<User>{
public int compare(User u1,User u2)
{
return u1.score - u2.score;
}
};
public class main {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<User> list = new ArrayList<User>();
list.add(new User("wangqiang",100));
list.add(new User("lizeyang",99));
list.add(new User("linyenan",78));
list.add(new User("yaojianliang",80));
list.add(new User("xinhong",66));
list.add(new User("gaoming",66));
list.add(new User("liupeng",87));
Collections.sort(list,new comparator());
for(User index:list)
{
System.out.println(index.score + index.name);
}
}
}
最后排序结果为:
66gaoming
78linyenan
80yaojianliang
87liupeng
99lizeyang
100wangqiang
另外,如果按照User对象的name属性进行降序排列,那么修改compare类如下:
public class comparator implements Comparator<User>{
public int compare(User u1,User u2)
{
return u2.name.compareTo(u1.name);
}
};
降序结果为:
xinhong66
wangqiang100
lizeyang99
liupeng87
linyenan78
gaoming66
如果元素本身就是可比较的,且升序。那么默认的Collections.sort(Object)就可以实现。
但是如果需要降序的话,那么就得修改compare方法。比如:string对象