1. Đối với array:
Để 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)
2. Đối với List
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
3. Sắp xếp list objects sử dụng Comparator
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}
4. Sắp xếp list objects sử dụng Comparable<T>
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