So sánh và sắp xếp trong java (Phần 2)
=> Trong phần trước chúng ta đã tìm hiểu về sự so sánh giữa biến nguyên thủy và biến tham chiếu (object) sự khác nhau và cách dùng của phương thức equal() và toán tử ==
I. Ghi đè phương thức object.
Phương thức equals là phương thức của lớp Object nên mọi phương thức đều được quyền ghi đè phương thức này.
Cho ví dụ :
Kết quả :
II. Comparable.
Trong java nếu cần so sánh 2 đối tượng này có giống nhau hay không ta dùng equals() , còn để so sánh và sắp xếp các đối tượng trong mảng của lớp nào đó thì ta sẽ implement interface comparable (). Interface Comparable là một generic interface.
Ví dụ sử dụng comparable với mảng tĩnh :
Trong ví dụ này thì chúng ta cần so sánh tên trong mảng , nếu lastname giống nhau thì so sánh đến firtname , khi implement Comparable chúng ta phải ghi đè phương thức compareTo()
Ví dụ LastName_1 đứng trước LastName_2 thì value = a.LastNamr_1.comparaTo(a.LastName_2) >0.
Kết quả :
Ví dụ của Comparable với mảng động :
Kết quả cũng giống phần code bên trên.
II.Comparator
=> Comparator được thi hành khi chúng ta không muốn Class chứa các đối tượng được so sánh implement từ Comparable.
Ví dụ của Comparator với mảng động :
Với Comparable chúng ta bắt buộc phải implement ở Class này nhưng Comparator thì không.
Ở lớp main này chúng ta bắt buộc phải ghi đè lại phương thức compare và truyền vào 2 đối tượng.
Chú ý nếu chúng ta gọi Collections.sort(p) mà không truyền hàm main() vào thì chương trình sẽ sắp xếp theo cách mặc định của java (lớn đến bé , alphabet)...nếu muốn nó sắp xếp theo ý bạn bắt buộc bạn phải truyền và hàm Main().
=> Chúng ta dùng Comparator và Comparable khi chúng ta muốn sắp xếp các đối tượng theo ý muốn của mình , nếu dùng Collections.sort thì mảng sẽ sắp xếp theo thứ tự mặc định của java.
Ví dụ về thực thi Comparator ngay trong hàm main :
Kết quả :
III.So sánh Comparator và Comparable.
=> Comparable bắt buộc phải implement ở lớp tạo nên đối tượng.
=> Comparator không được phép implement ở lớp tạo nên đối tượng.
=> Cách thực thi Comparator cho khả năng tạo nhiều hàm để so sánh(1 đối tược sẽ có nhiều thuộc tính để so sánh) vì chúng ta có thể gọi lần lượt chúng trong Collections Sort thay vì ở trong Comparable chúng ta không cần gọi mà chương trình tự động gọi cho chúng ta.
I. Ghi đè phương thức object.
Phương thức equals là phương thức của lớp Object nên mọi phương thức đều được quyền ghi đè phương thức này.
Cho ví dụ :
Kết quả :
II. Comparable.
Trong java nếu cần so sánh 2 đối tượng này có giống nhau hay không ta dùng equals() , còn để so sánh và sắp xếp các đối tượng trong mảng của lớp nào đó thì ta sẽ implement interface comparable (). Interface Comparable là một generic interface.
Ví dụ sử dụng comparable với mảng tĩnh :
Trong ví dụ này thì chúng ta cần so sánh tên trong mảng , nếu lastname giống nhau thì so sánh đến firtname , khi implement Comparable chúng ta phải ghi đè phương thức compareTo()
Ví dụ LastName_1 đứng trước LastName_2 thì value = a.LastNamr_1.comparaTo(a.LastName_2) >0.
Kết quả :
Ví dụ của Comparable với mảng động :
Kết quả cũng giống phần code bên trên.
II.Comparator
=> Comparator được thi hành khi chúng ta không muốn Class chứa các đối tượng được so sánh implement từ Comparable.
Ví dụ của Comparator với mảng động :
Với Comparable chúng ta bắt buộc phải implement ở Class này nhưng Comparator thì không.
Ở lớp main này chúng ta bắt buộc phải ghi đè lại phương thức compare và truyền vào 2 đối tượng.
Chú ý nếu chúng ta gọi Collections.sort(p) mà không truyền hàm main() vào thì chương trình sẽ sắp xếp theo cách mặc định của java (lớn đến bé , alphabet)...nếu muốn nó sắp xếp theo ý bạn bắt buộc bạn phải truyền và hàm Main().
=> Chúng ta dùng Comparator và Comparable khi chúng ta muốn sắp xếp các đối tượng theo ý muốn của mình , nếu dùng Collections.sort thì mảng sẽ sắp xếp theo thứ tự mặc định của java.
Ví dụ về thực thi Comparator ngay trong hàm main :
Kết quả :
III.So sánh Comparator và Comparable.
=> Comparable bắt buộc phải implement ở lớp tạo nên đối tượng.
=> Comparator không được phép implement ở lớp tạo nên đối tượng.
=> Cách thực thi Comparator cho khả năng tạo nhiều hàm để so sánh(1 đối tược sẽ có nhiều thuộc tính để so sánh) vì chúng ta có thể gọi lần lượt chúng trong Collections Sort thay vì ở trong Comparable chúng ta không cần gọi mà chương trình tự động gọi cho chúng ta.
Nhận xét
Đăng nhận xét