Sắp xếp Collection trong Java
Để sort một array, chúng ta có thể dùng method sort trong gói java.util.Arrays Ví dụ: int [] array = new int[]{1, 2, 4, 1, 3, 5, 7, 6}; Arrays.sort(array); for (int x : array) { System.out.println(x); } Kết quả: 1 1 2 3 4 5 6 7 Gói Java.util.Arrays còn hỗ trợ 1 số phương thức sort khác ...
Để sort một array, chúng ta có thể dùng method sort trong gói java.util.Arrays Ví dụ:
int [] array = new int[]{1, 2, 4, 1, 3, 5, 7, 6}; Arrays.sort(array); for (int x : array) { System.out.println(x); }
Kết quả:
1 1 2 3 4 5 6 7
Gói Java.util.Arrays còn hỗ trợ 1 số phương thức sort khác như sau:
static void sort(byte[] a) static void sort(byte[] a, int fromIndex, int toIndex) static void sort(char[] a) static void sort(char[] a, int fromIndex, int toIndex) static void sort(double[] a) static void sort(double[] a, int fromIndex, int toIndex) static void sort(float[] a) static void sort(float[] a, int fromIndex, int toIndex) static void sort(int[] a) static void sort(int[] a, int fromIndex, int toIndex) static void sort(long[] a) static void sort(long[] a, int fromIndex, int toIndex) static void sort(Object[] a) static void sort(Object[] a, int fromIndex, int toIndex) static void sort(short[] a) static void sort(short[] a, int fromIndex, int toIndex) static <T> void sort(T[] a, Comparator<? super T> c) static <T> void sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c)
List<Integer> list = new ArrayList<Integer>(Arrays.asList(1, 2, 4, 1, 3, 5, 7, 6)); Collections.sort(list); list.forEach(e -> System.out.println(e));
Kết quả:
1 1 2 3 4 5 6 7
Trước hết, chúng ta tạo class Student như sau:
public class Student { private String name; private int age; public Student() { } public Student(String name,int age ) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + ' + ", age=" + age + '}'; } }
3.1 Implement interface Comparator<T>
Interface Comparable<T> cung cấp một phương thức để sắp xếp list object là int compare(T o1, T o2). Việc chúng ta chỉ là implement interface này.
public class Student implements Comparator<Student> { // Các method và field như ở trên @Override public int compare(Student o1, Student o2) { return o1.getAge() - o2.getAge(); } }
Và gọi java.util.Collections.sort để sắp xếp.
List<Student> students = new ArrayList<>(); students.add(new Student("Jonh", 17)); students.add(new Student("Peter", 19)); students.add(new Student("Henry", 18)); java.util.Collections.sort(students, new Student()); students.forEach(e -> System.out.println(e));
Kết quả:
Student{name='Jonh', age=17} Student{name='Henry', age=18} Student{name='Peter', age=19}
##3.2 Sử dụng anonymous comparator để so sánh Thay vì implement trực tiếp từ interface Comparator<T>, chúng ta có thể sử dụng anonymous comparator như sau:
List<Student> students = new ArrayList<>(); students.add(new Student("Jonh", 17)); students.add(new Student("Peter", 19)); students.add(new Student("Henry", 18)); Collections.sort(students, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getAge() - o2.getAge(); } }); students.forEach(e -> System.out.println(e));
Kết quả vẫn không đổi:
Student{name='Jonh', age=17} Student{name='Henry', age=18} Student{name='Peter', age=19}
Vẫn sử dụng class Student ở trên, nhưng chúng ta sẽ implements interface Comparable<Student> và override lại method compareTo(Student o)
@Override public int compareTo(Student o) { return this.getAge() - o.getAge(); }
List<Student> students = new ArrayList<>(); students.add(new Student("Jonh", 17)); students.add(new Student("Peter", 19)); students.add(new Student("Henry", 18)); Collections.sort(students); students.forEach(e -> System.out.println(e));
Kết quả:
Student{name='Jonh', age=17} Student{name='Henry', age=18} Student{name='Peter', age=19}
Tham khảo: https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html