Collections.sort方法对list的两种排序方式
Collections.sort( )分为两种,一种方式是排序规则,另一种方式是排序算法 。
其中规则是用来判断对象而算法则考虑如何进行排序
对于自定义对象,sort()不知道规则,所以无法比较,这种情况下一定要定义排序规则。方式有两种:
第一种,java.lang下面的一个接口:Comparable。可以让自定义对象实现一个Comparable接口,这个接口只有一个方法comparableTo(Object o)
其规则是当前对象与o对象进行比较,返回一个int值,系统根据此值进行排序。
如当前对象>o对象,则返回值>0;
如当前对象=o对象,则返回值=0;
如当前对象<o对象,则返回值<0;
import java.util.*;
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());
}
}
public class Test {
public static void main(String[] args) {
User user1 = new User();
user1.setName("zhangsan");
user1.setOrder(10);
User user2 = new User();
user2.setName("lisi");
user2.setOrder(6);
User user3 = new User();
user3.setName("wangwu");
user3.setOrder(11);
User user4 = new User();
user4.setName("zhaoqi");
user4.setOrder(2);
List<User> list = new ArrayList<User>();
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
Collections.sort(list);
for(User u : list){
System.out.println(u.getName());
}
}
}
运行结果是:
zhaoqi
lisi
zhangsan
wangwu
第二种方式,java.util下有一个Comparator(比较器)。它拥有compare( )方法,用来比较两个对象。
import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
class User {
String name;
String age;
public User(String name,String age){
this.name=name;
this.age=age;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class ComparatorUser implements Comparator{
public int compare(Object arg0, Object arg1) {
User user0=(User)arg0;
User user1=(User)arg1;
//首先比较年龄,如果年龄相同,则比较名字
int flag=user0.getAge().compareTo(user1.getAge());
if(flag==0){
return user0.getName().compareTo(user1.getName());
}else{
return flag;
}
}
}
public class Sort {
public static void main(String[] args){
List userlist=new ArrayList();
userlist.add(new User("dd","4"));
userlist.add(new User("aa","1"));
userlist.add(new User("ee","5"));
userlist.add(new User("bb","2"));
userlist.add(new User("ff","5"));
userlist.add(new User("cc","3"));
userlist.add(new User("gg","6"));
ComparatorUser comparator=new ComparatorUser();
Collections.sort(userlist, comparator);
for (int i=0;i<userlist.size();i++){
User user_temp=(User)userlist.get(i);
System.out.println(user_temp.getAge()+","+user_temp.getName());
}
}
}
运行结果
1,aa
2,bb
3,cc
4,dd
5,ee
5,ff
6,gg