14 June 2016

Sắp xếp các đối tượng trong Sort ArrayList Comparator vs compare


**Trong thực tế khi lập trình, công việc sắp xếp 1 danh sách các đối tượng phải áp dụng rất nhiều. Ví dụ:
- Sắp xếp họ tên theo thứ tự a, b, c.
- Sắp xếp danh sách kết quả thi theo thứ tự từ cao xuống thấp.
- Sắp xếp tài liệu theo thứ tự mới trước, cũ sau.
- ..v.v..

- Việc sắp xếp một các đối tượng trong 1 ArrayList có thể có nhiều cách. Các bạn có thể áp dụng các phương pháp cơ bản, hoán đổi vị trí khi so sánh giống như việc sắp xếp các phần tử trong mảng đã dùng. Tuy nhiên, ở bài này mình sẽ giới thiệu 1 cách sắp xếp cực ngắn gọn, Java đã hỗ trợ sẵn, đó là phương thức sắp xếp Collection.sort.
- Mình sẽ nêu một vài ví dụ cụ thể để các bạn cùng tìm hiểu!
Ở các ví dụ này, các thuộc tính đối tượng mình để public cho ngắn gọn, chúng ta tập trung vào đoạn sắp xếp!

Ví dụ 1: Sắp xếp một danh sách các đối tượng sinh viên có 2 thuộc tính họ tên và điểm thi.
Các bạn chú ý đoạn này:
PHP:
//Sắp xếp danh sách theo theo số điểm giảm dần!
        
Collections.sort(danhSach, new Comparator<SinhVien>() {
            @
Override
            
public int compare(SinhVien sv1SinhVien sv2) {
                if (
sv1.diem sv2.diem) {
                    return 
1;
                } else {
                    if (
sv1.diem == sv2.diem) {
                        return 
0;
                    } else {
                        return -
1;
                    }
                }
            }
        });
- Trên là cách sử dụng phương thức Collections.sort với danhSach là một đối tượng ArrayList, bên trong chứa danh sách các đối tượng SinhVien
- Phương thức public int compare(SinhVien sv1, SinhVien sv2) trả về kiểu giá trị nguyên. Đoạn code trên là giúp sắp xếp theo thứ tự giảm dần của số điểm từng đối tượng sinh viên. Nếu bạn muốn sắp xếp tăng dần thì đổi chỗ 1 và -1 cho nhau là được!
PHP:
Collections.sort(danhSach, new Comparator<SinhVien>() {
            @
Override
            
public int compare(SinhVien sv1SinhVien sv2) {
                if (
sv1.diem sv2.diem) {
                    return -
1;
                } else {
                    if (
sv1.diem == sv2.diem) {
                        return 
0;
                    } else {
                        return 
1;
                    }
                }
            }
        });
Toàn bộ code chương trình như sau:
PHP:
package javaandroidvn;
 
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Scanner;

class 
SinhVien {

    public 
String hoTen;
    public 
int diem;
}

public class 
JavaAndroidVn {

    public static 
void main(String[] args) {
        
Scanner input = new Scanner(System.in);
        
System.out.println("Nhập số sinh viên: ");
        
int n input.nextInt();

        
ArrayList<SinhViendanhSach = new ArrayList();

        for (
int i 0ni++) {
            
input.nextLine();
            
SinhVien x = new SinhVien();
            
System.out.println("Thông tin sinh viên thứ " i);
            
System.out.print("Họ và Tên: ");
            
x.hoTen input.nextLine();
            
System.out.print("Điểm: ");
            
x.diem input.nextInt();
            
danhSach.add(x);
        }

        
//Sắp xếp danh sách theo số điểm giảm dần!
        
Collections.sort(danhSach, new Comparator<SinhVien>() {
            @
Override
            
public int compare(SinhVien sv1SinhVien sv2) {
                if (
sv1.diem sv2.diem) {
                    return 
1;
                } else {
                    if (
sv1.diem == sv2.diem) {
                        return 
0;
                    } else {
                        return -
1;
                    }
                }
            }
        });

        
System.out.println("Danh sách sắp xếp theo thứ tự điểm giảm dần là: ");
        for (
int i 0danhSach.size(); i++) {
            
System.out.println("Tên: " danhSach.get(i).hoTen " Điểm: " danhSach.get(i).diem);
        }
    }
}
Ví dụ 2: Sắp xếp danh sách các đối tượng theo thứ tự trong bảng chữ cái! a b c
PHP:
package javaandroidvn;
 
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Scanner;

class 
SinhVien {

    public 
String hoTen;
    public 
int diem;
}

public class 
JavaAndroidVn {

    public static 
void main(String[] args) {
        
Scanner input = new Scanner(System.in);
        
System.out.println("Nhập số sinh viên: ");
        
int n input.nextInt();

        
ArrayList<SinhViendanhSach = new ArrayList();

        for (
int i 0ni++) {
            
input.nextLine();
            
SinhVien x = new SinhVien();
            
System.out.println("Thông tin sinh viên thứ " i);
            
System.out.print("Họ và Tên: ");
            
x.hoTen input.nextLine();
            
System.out.print("Điểm: ");
            
x.diem input.nextInt();
            
danhSach.add(x);
        }

        
//Sắp xếp danh sách theo theo thứ tự a b c!
        
Collections.sort(danhSach, new Comparator<SinhVien>() {
            @
Override
            
public int compare(SinhVien sv1SinhVien sv2) {
                return (
sv1.hoTen.compareTo(sv2.hoTen));
                
// Muốn đảo danh sách các bạn đối thành
                //return (sv2.hoTen.compareTo(sv1.hoTen));
            
}
        });

        
System.out.println("Danh sách sắp xếp theo tên trong bảng chữ cái a - b - c: ");
        for (
int i 0danhSach.size(); i++) {
            
System.out.println("Tên: " danhSach.get(i).hoTen " Điểm: " danhSach.get(i).diem);
        }
    }
}
Nguồn : Android.vn

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang