一般都是對自定義類的排序才需要進行排序規則的定義,因爲普通的數據類型,比如說: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接口所以就不需要進行規則的定義