e không hiểu chỗ return 1 return -1 trong đoạn code trên ai biết giải thích giúp e với là vì tại sao mik viết như vậy là nó có thể đưa ra giá trị max dc ạ
Giải thích phương thức max của class Collection
Vì bạn đang cần so sánh 2 object (Student) với nhau nhưng thực ra không có quy tắc định sẵn nào khi so sánh 2 object cả nên ta phải định nghĩa một quy luật so sánh cho 2 đối tượng Student của bạn (ở đây là so sánh số tuổi). Bạn làm việc đó thông qua Comparator và hàm compare() của lớp này đã quy định sẵn là:
Nếu ObjectA > ObjectB: compare(ObjectA, ObjectB) sẽ trả về 1 số dương
Nếu ObjectA == ObjectB thì trả về 0
Còn ObjectA < ObjectB thì trả về 1 số âm
Miễn là bạn tuân thủ việc này thì thằng Comparator chẳng thèm quan tâm bạn viết gì trong hàm compare(). Bạn cho random 1 với -1 cũng được. Chẳng sao cả
Không biết mình giải thích dễ hiểu không?
Nguồn: https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#compare-T-T-
thanks bro e cũng chưa thông lắm ở cái chỗ mà compare nó chỉ return 1 hoặc 0 hoặc -1 mà nó lại lấy ra đc student có tuổi lớn nhất. e thử sửa hàm compare để return object mà nó báo sai
Hình như sai sai. Compare chỉ return giá trị int thôi mà.
Bạn có thể hình dung như vầy:
Thằng Collections.max() mục đích của nó là tìm thằng Student lớn nhất. Nhưng “lớn nhất” ở đây là do bạn định nghĩa. Ví dụ đối với bạn, thằng học sinh “lớn nhất” là thằng học sinh già nhất trong số đó. Thì bạn cung cấp một Comparator cho hàm max(). Sau đó, thằng max sẽ dùng hàm compare() để hỏi xem “thằng A với thằng B này có quan hệ như thế nào?”. Nếu thằng A lớn hơn, compare() trả về 1 số > 0, nếu B lớn hơn, compare() trả về 1 số < 0. Bằng nhau thì trả về số 0.
Thằng max() chỉ cần hiểu mối liên hệ giữa 2 object này: “lớn hơn”, “bé hơn”, “bằng nhau” và ta không thể biểu diễn được hết cả 3 bằng giá trị boolean. Nên lập trình viên đã sử dụng kiểu mã hoá trên để biểu diễn cho 3 loại quan hệ này.

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