一般都是对自定义类的排序才需要进行排序规则的定义,因为普通的数据类型,比如说:int 、String、long等都已经实现了implements Comparator接口,这个接口里面就两个抽象方法:compare() 和 equals(),而equals在object中定义的,所以所有类都会实现了这个方法,因而就只需要实现compare()即可。
1:展示代码如下
public class User implements Comparator<User>{
public String name;
public int age;
public String addr;
public String sortType;
@Override
public int compare(User o1, User o2) {
// TODO Auto-generated method stub
if("UP".equals(sortType)){//升序
return o1.age - o2.age;
}else if("DOWN".equals(sortType)){//降序
return o2.age - o1.age;
}else{ //默认为升序
return o1.age - o2.age;
}
}
}
2:使用
public class UserCompareTest {
public static void main(String[] args) {
User user = new User();
user.age = 11;
User user1 = new User();
user.age = 5;
User user2 = new User();
user.age = 8;
User user3 = new User();
user.age = 3;
List<User> users = new ArrayList<User>();
users.add(user);
users.add(user1);
users.add(user2);
users.add(user3);
System.out.println(users);
Collections.sort(users, new User());
System.out.println(users);
}
}
3:另一种比较经典的匿名类方式,就是如果很少对这个对象列表进行排序的话,那么这个类就不用实现implements Comparator接口,可以在需要排序的时候,在调用方使用Comparator接口的匿名类对象形式来对这个类进行排序
代码如下:
public class User{//实体类什么都不用管,排序规则由需要排序的时候使用Comparator<T>接口的匿名类对象来处理。
public String name;
public int age;
public String addr;
public String sortType;
}
调用:
public static void main(String[] args) {
User user = new User();
user.age = 11;
User user1 = new User();
user1.age = 5;
User user2 = new User();
user2.age = 8;
User user3 = new User();
user3.age = 3;
List<User> users = new ArrayList<User>();
users.add(user);
users.add(user1);
users.add(user2);
users.add(user3);
System.out.println(users);
Collections.sort(users,new Comparator<User>() {
//匿名类对象的形式
@Override
public int compare(User o1, User o2) {
// TODO Auto-generated method stub
return o1.age - o2.age;
}
});
System.out.println(users);
}
}
总结:使用sort方法排序的方式就这两种,如果是自己定义的对象,那么就需要自己定义排序规则,但是如果是系统提供的那些基本数据类型,比如string、int、long等,由于已经实现了这个comparetor接口所以就不需要进行规则的定义