1. 内部比较器
思路:需比较的类实现Comparable接口,重写compareTo方法,使该类对外提供一个默认比较的实现。
@Getter
@Setter
@ToString
@AllArgsConstructor
public class UserInnerComparator implements Comparable<UserInnerComparator> {
Integer id;
Integer age;
@Override
public int compareTo(UserInnerComparator o) {
return this.age - o.getAge();
}
public static void main(String[] args) {
UserInnerComparator user1 = new UserInnerComparator(1, 18);
UserInnerComparator user2 = new UserInnerComparator(2, 28);
UserInnerComparator user3 = new UserInnerComparator(3, 25);
UserInnerComparator user4 = new UserInnerComparator(4, 15);
System.out.println("-------- test list --------");
ArrayList<UserInnerComparator> list = new ArrayList<UserInnerComparator>();
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
Collections.sort(list);
printList(list);
System.out.println("-------- test array --------");
UserInnerComparator[] arr = new UserInnerComparator[4];
arr[0] = user1;
arr[1] = user2;
arr[2] = user3;
arr[3] = user4;
Arrays.sort(arr);
printArray(arr);
}
public static void printList(ArrayList<UserInnerComparator> list) {
for (UserInnerComparator user : list) {
System.out.println(user);
}
}
public static void printArray(UserInnerComparator[] arr) {
for (UserInnerComparator user : arr) {
System.out.println(user);
}
}
}
运行结果如下:
-------- test list --------
UserInnerComparator(id=4, age=15)
UserInnerComparator(id=1, age=18)
UserInnerComparator(id=3, age=25)
UserInnerComparator(id=2, age=28)
-------- test array --------
UserInnerComparator(id=4, age=15)
UserInnerComparator(id=1, age=18)
UserInnerComparator(id=3, age=25)
UserInnerComparator(id=2, age=28)
2. 外部比较器
思路:定义新的比较器类作为工具类,实现Comparator接口,实现compare<T t1, T t2>方法。需比较的类不做任何实现,调用sort方法排序时传入list/array和比较器。
public class UserOuterComparator implements Comparator<User> {
@Override
public int compare(User u1, User u2) {
return u1.getAge() - u2.getAge();
}
public static void main(String[] args) {
User user1 = new User(1, 18);
User user2 = new User(2, 28);
User user3 = new User(3, 25);
User user4 = new User(4, 15);
System.out.println("-------- test list --------");
ArrayList<User> list = new ArrayList<User>();
UserOuterComparator uoc = new UserOuterComparator();
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
Collections.sort(list, uoc);
printList(list);
System.out.println("-------- test array --------");
User[] arr = new User[4];
arr[0] = user1;
arr[1] = user2;
arr[2] = user3;
arr[3] = user4;
Arrays.sort(arr,uoc);
printArray(arr);
}
public static void printList(ArrayList<User> list) {
for (User user : list) {
System.out.println(user);
}
}
public static void printArray(User[] arr) {
for (User user : arr) {
System.out.println(user);
}
}
}
@Getter
@Setter
@ToString
@AllArgsConstructor
class User {
Integer id;
Integer age;
}
运行结果如下:
-------- test list --------
User(id=4, age=15)
User(id=1, age=18)
User(id=3, age=25)
User(id=2, age=28)
-------- test array --------
User(id=4, age=15)
User(id=1, age=18)
User(id=3, age=25)
User(id=2, age=28)