Hỏi đáp về Comparable trong Java

Em xin chào mọi người. Em đang học lập trình Java và có học về chủ đề sử dụng so sánh để so sánh các đối tượng là Comparable và Comparator trong Java.
Đối với Comparable, lý thuyết nói rằng: “single sorting sequence” tức là sử dụng Comparable dựa trên một thành phần duy nhất đó như id, name, và price. Tức là ở đây nếu như có một Class mình muốn so sánh thì chúng ta chỉ sử dụng được 1 tiêu chí để sắp xếp, có thể là sắp xếp theo id, hoặc name, hoặc price. Vậy nếu như trong quá trình sắp xếp ví dụ như price. Nếu price bằng nhau thì chúng ta sắp xếp theo id. Vậy trong trường hợp này chúng ta có còn được gọi là “single sorting sequence” không ạ. Tks mọi người.

2 Likes

Lý thuyết khá đơn giản sao bạn làm cho phức tạp vậy? Nếu chỉ so sánh dựa trên 1 tiêu chí thì dùng Comparable và liên quan single sorting sequence, còn nếu nhiều hơn 1 tiêu chí thì dùng Comparator liên quan multiple sorting sequences. Có ai xúi bạn dùng Comparable cho nhiều hơn 1 tiêu chí?

2 Likes

Vâng. Mình cảm ơn bạn. Mình có tham khảo trên mạng thì có đoạn code họ so sánh tuổi, nếu tuổi bằng nhau thì sắp xếp theo id thì mình có đọc là “single sorting sequence” ý ở đây là mình chỉ có thể sắp xếp duy nhất theo một trường dữ liệu hay là chỉ cung cấp được 1 phương thức so sánh cho đối tượng thuộc Class đó ý ! Tại mình hơi mơ hồ :(((

“Single sorting sequence” là theo 1 thứ tự duy nhất, chứ không phải là theo 1 trường duy nhất.

2 Likes

Comparable provides single sorting sequence. It means that the objects can be sorted based on a single data member.
Source: Difference between Comparable and Comparator in Java - Scaler Topics

Có vẻ như để làm nổi bật sự khác nhau mà đa số sách hay tài liệu đều ghi cùng 1 kiểu là comparable chỉ cho sort trên cùng 1 field. Điều này là sai bét luôn vì bản chất của comparable là triển khai cho 1 class có khả năng sort theo thứ tự tự nhiên mặc định chứ không hề liên quan đến việc cho sort trên 1 field.
Để ý 1 chút thì dev sẽ ghi đè phương thức compareTo để trả về thứ tự tương đối của this và other chứ không phải là return giá trị của 1 field bất kì của this. Không hiểu lí do gì mà có thể suy luận ra được thành chỉ so sánh trên 1 field được

4 Likes

Hello,
Comparable is typically used for a single sorting criterion. However, if you need to sort by multiple criteria like price and then id, you should use a Comparator instead. This allows for defining multiple sorting sequences based on different criteria. So, for your case, implementing a Comparator for sorting by price and then id is more appropriate.
i hope thus will help you
Thank you

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?