[Java Cơ Bản]Sắp Xếp Mảng Các đối Tượng | Code And Play Game

Khỏi phải nói dài dòng vì ai lập trình cũng biết việc sắp xếp được dùng đi dùng lại rất nhiều trong lập trình và cuộc sống. Có thể kể ra vài trường hợp như: Sắp xếp các sinh viên trong lớp, sắp xếp nhân viên trong công ty,… Trong bài viết này chúng ta sẽ cùng tìm hiểu cách sắp xếp với ví dụ sắp xếp sinh viên trong lớp.

Level 1: Nhập vào tên các sinh viên. Sắp xếp và in ra màn hình danh sách sinh viên đã sắp xếp.

Quá dễ phải không? – Vì đề bài không cho trước số sinh viên trong lớp, chỉ biết có thể có 1 hoặc nhiều sinh viên => dùng ArrayList – Chỉ quan tâm đến tên => dùng ArrayList<String> – Để sắp xếp List, ArrayList,… chúng ta dùng Collections.sort(), với những mảng như String[], int[] thì dùng Arrays.sort().

level1_code_sort

code

sort-level1-result

result

Level 2: Mỗi sinh viên sẽ được lưu theo tên và điểm. Sắp xếp theo điểm số của sinh viên.

Bắt đầu đến đây chúng ta cần phải xây dựng class Student với 2 thuộc tính: name, score. Và class StudentController chứ 1 ArrayList<Student> để quản lý, sắp xếp Student.

sort-level2-src.PNG

src

sort-level2-Student.PNG

class Student

sort-level2-StudentController.PNG

StudentController

Như các bạn đã thấy, Collections.sort báo đỏ. Vì Collections chỉ sắp xếp những Object nào Comparable. Vậy chúng ta sẽ phải quay trở về cách sắp xếp truyền thống? Rất may cho chúng ta là Java đã xây dựng interface Comparable để giúp chúng ta. Cách sử dụng các bạn tham khảo dưới đây nhé: – Đầu tiên, cho Student implement Comparable<Student>. Bạn sẽ phải override lại hàm compareTo(Student o), hãy xem các trường hợp return: return 0 => không đổi vị trí của student đang xét và o return ra số dương => chỉ số đang xét của thằng nào lớn hơn lên trước

return ra số âm => ngược với dương

Trong bài này mình sẽ sắp xếp điểm từ cao đến thấp. Các bạn có thể thử ngược lại nhé.

sort-level2-Student-fixed

Student fixed

– Vì Student lúc này không phải String nên chúng ta cũng sẽ sửa lại method showListStudent như sau:

sort-level2-StudentController-fixed.PNG

showListStudent fixed

Và kết quả khi run:

sort-level2-Main sort-level2-result

Level 3: In danh sách sinh viên đã sắp xếp theo điểm. Sau đó chọn 3 sinh viên điểm cao nhất đi thi. Nếu cùng điểm thì xét tên theo thứ tự Z->A (Ví dụ có 2 người B và A cùng điểm mà chỉ được chọn 1 thì ta chọn B).

Dùng Comparable chỉ cho phép so sánh 1 lần duy nhất vì chỉ có 1 hàm CompareTo. Vậy chúng ta phải làm thế nào?  Đây là lúc chúng ta dùng tới Comparator. Nếu các bạn để ý thì Collections.sort() có thể truyền vào 2 tham số: List các phần tử và 1 Comparator để dựa vào đó nó sẽ sắp xếp. Mỗi lần muốn sắp xếp theo tiêu chí nào ta sẽ viết thêm 1 Comparator cho tiêu chí đó.

Ở đây mình sẽ thêm studentScoreAndNameComparator có kiểu Comparator vào class Student và set nó là public static để có thể gọi dễ dàng.

sort-level3-Student.PNG

Student

Và ở StudentController chúng ta sẽ thêm method sortByStudentScoreAndName và method showTop3Student()

sort-level3-Student-Controller.PNG

StudentController

Và giờ test thôi:

sort-level3-Main sort-level3-Result

Code: https://github.com/tungbt94/Java-sort-tut.git Có 3 commit tương ứng code của 3 level. Các bạn có thể down về và xem nhé.

Ở bài này chúng ta đã cùng tìm hiểu cách sắp xếp mảng các Object bất kỳ. Bài tiếp theo trong loạt bài Java cơ bản chúng ta sẽ cùng đi tìm hiểu về cách lưu vào file nhé.

Chia sẻ:

  • X
  • Facebook
Thích Đang tải...

Có liên quan

Từ khóa » Hàm Sắp Xếp Tên Java