Sorting trong Collections – VietTuts

Chúng ta có thể sắp xếp các phần tử của:

Lớp Collections trong java cung cấp các phương thức static để sắp xếp các phần tử của collection. Nếu các phần tử collection thuộc kiểu Set hoặc Map, chúng ta có thể sử dụng TreeSet hoặc TreeMap. Nhưng chúng ta không thể sắp xếp các phần tử của List. Collections cung cấp phương thức sort() để phân sắp xếp các phần tử của List.

public void sort(List list): được sử dụng để sắp xếp các phần tử của List. Với điều kiện các phần tử của List phải là kiểu Comparable. Nghĩa là lớp các phần tử phải được implements giao diện Comparable

Dưới đây là các ví dụ về sorting trong Collections với các đối tượng String, đối tượng của Wrapper, và đối tượng của lớp do người dùng định nghĩa.

Ví dụ 1: Sử dụng phương thức Collections.sort(list) để sắp xếp các phần tử String của list theo thứ tự tăng dần.

Kết quả:

Đối với String implements giao diện Comparable và mặc định là sắp xếp tăng dần. Vậy thì để sắp xếp giảm dần thì bản phải làm gì? Hãy xem ví dụ dưới đây nhé.

Ví dụ 1: Sử dụng phương thức Collections.sort(list, new Comparator<T>()) để sắp xếp các phần tử String của list theo thứ tự giảm dần hoặc tăng dần.

Kết quả:

Trong ví dụ trên bạn phải tạo ra một đối tượng nặc danh của lớp Comparator để cài đặt tiêu chí so sánh trong phương thức phương thức compare() để so sánh 2 chuỗi String với nhau.

Dưới đây là ví dụ sắp xếp các đối tượng Double tăng dần (mặc định) và giảm dần (sử dụng giao tiếp Comparator).

Kết quả:

Cách 1: lớp Student implements giao diện java.lang.Comparable để cài đặt phương thức compareTo(). Bạn cần phải cài đặt tiêu chí để so sánh trong phương thức compareTo() để so sánh các đối tượng Student với nhau, dưới đây là ví dụ sắp xếp các đối tượng Student tăng dần theo name:

Tạo lớp Student.java

package vn.viettuts.collection;

/**
 * Student class
 * 
 * @author viettuts.vn
 */
class Student implements Comparable<Student> {
    private int id;
    private String name;
    private int age;
    private String address;

    public Student() {
    }

    public Student(int id, String name, int age, String address) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    // getter & setter
    
    @Override
    public String toString() {
        return "Student@id=" + id + ",name=" + name 
                + ",age=" + age + ",address=" + address;
    }

    @Override
    public int compareTo(Student student) {
        // sort student's name by ASC
        return this.getName().compareTo(student.getName());
    }
}