Bài 300: Comparable trong java

Ngày đăng: 1/7/2023 9:32:10 AM

Giao diện Comparable trong java được sử dụng để sắp xếp các đối tượng của lớp do người dùng định nghĩa (user-defined). Giao diện này thuộc về gói java.lang và chỉ chứa một phương thức có tên compareTo(Object).


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

  1. Các đối tượng String.
  2. Các đối tượng của lớp Wrapper.
  3. Các đối tượng của lớp do người dùng định nghĩa (User-defined).

Phương thức compareTo(Object obj)

public int compareTo (Object obj): được sử dụng để so sánh đối tượng hiện tại với đối tượng được chỉ định.


Lớp Collections trong java

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.

Sorting trong Collections


Ví dụ về Comparable trong java

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38     

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());

    }

}

Tạo lớp ComparableExample.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27     

28

package vn.viettuts.collection;

 

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

 

/**

 * ComparableExample class

 *

 * @author viettuts.vn

 */

public class ComparableExample {

    public static void main(String[] args) {

        // create list students

        List<Student> listStudents = new ArrayList<Student>();

        // add students to list

        listStudents.add(new Student(1, "Vinh", 19, "Hanoi"));

        listStudents.add(new Student(2, "Hoa", 19, "Hanoi"));

        listStudents.add(new Student(3, "Phu", 20, "Hanoi"));

        listStudents.add(new Student(4, "Quy", 22, "Hanoi"));

        // sort list student

        Collections.sort(listStudents);

        // show list students

        for (Student student : listStudents) {

            System.out.println(student.toString());

        }

    }

}

Kết quả:

 Student@id=2,name=Hoa,age=19,address=Hanoi
 Student@id=3,name=Phu,age=20,address=Hanoi
 Student@id=4,name=Quy,age=22,address=Hanoi
 Student@id=1,name=Vinh,age=19,address=Hanoi

Nguồn tin: viettuts.vn