Sự khác biệt giữa trở về là gì 0
, trở về 1
và trở về -1
trong compareTo()
trong Java?
a-b
nếu a
lớn hơn, kết quả là dương (+1) khác, nếu b
lớn hơn, kết quả là âm ... nếu chúng bằng nó0
Sự khác biệt giữa trở về là gì 0
, trở về 1
và trở về -1
trong compareTo()
trong Java?
a-b
nếu a
lớn hơn, kết quả là dương (+1) khác, nếu b
lớn hơn, kết quả là âm ... nếu chúng bằng nó0
Câu trả lời:
Từ tài liệu tham khảo của Comp Compare.compareTo (T) :
So sánh đối tượng này với đối tượng được chỉ định để đặt hàng. Trả về một số nguyên âm, không hoặc một số nguyên dương vì đối tượng này nhỏ hơn, bằng hoặc lớn hơn đối tượng đã chỉ định.
Người triển khai phải đảm bảo sgn (x.compareTo (y)) == -sgn (y.compareTo (x)) cho mọi x và y. (Điều này ngụ ý rằng x.compareTo (y) phải ném một ngoại lệ. Y.compareTo (x) ném một ngoại lệ.)
Người triển khai cũng phải đảm bảo rằng quan hệ có tính bắc cầu: (x.compareTo (y)> 0 && y.compareTo (z)> 0) ngụ ý x.compareTo (z)> 0.
Cuối cùng, trình triển khai phải đảm bảo rằng x.compareTo (y) == 0 ngụ ý rằng sgn (x.compareTo (z)) == sgn (y.compareTo (z)), cho tất cả z.
Chúng tôi thực sự khuyến khích, nhưng không bắt buộc nghiêm ngặt rằng (x.compareTo (y) == 0) == (x.equals (y)). Nói chung, bất kỳ lớp nào triển khai giao diện So sánh được và vi phạm điều kiện này phải chỉ ra rõ ràng thực tế này. Ngôn ngữ được đề xuất là "Lưu ý: lớp này có thứ tự tự nhiên không phù hợp với bằng".
Trong mô tả ở trên, ký hiệu sgn (biểu thức) chỉ định hàm ký hiệu toán học, được xác định để trả về một trong các -1, 0 hoặc 1 tùy theo giá trị của biểu thức là âm, 0 hay dương.
Nói ngắn gọn:
this.compareTo(that)
trả lại
trong đó việc triển khai phương thức này xác định ngữ nghĩa thực tế của <
>
và ==
(ý tôi không phải là ==
toán tử nhận dạng đối tượng của java)
"abc".compareTo("def")
sẽ mang lại giá trị nhỏ hơn 0 theo abc
thứ tự bảng chữ cái trước đó def
.
Integer.valueOf(2).compareTo(Integer.valueOf(1))
sẽ mang lại giá trị lớn hơn 0 vì 2 lớn hơn 1.
Lưu ý: Một phương pháp hay đối với một lớp thực hiện So sánh là khai báo ngữ nghĩa của phương thức CompareTo () của nó trong javadocs.
Lưu ý: bạn nên đọc ít nhất một trong những điều sau:
Cảnh báo: bạn không nên dựa vào các giá trị trả về của CompareTo being -1
, 0
và 1
. Bạn nên thường xuyên kiểm tra x < 0
, x == 0
, x > 0
, tương ứng.
sgn()
, không trực tiếp -1 và 1. Bạn nên thêm điều này vào phiên bản ngắn của mình.
Tôi sử dụng cách ghi nhớ này:
a.compareTo(b) < 0 // a < b
a.compareTo(b) > 0 // a > b
a.compareTo(b) == 0 // a == b
Bạn giữ các dấu hiệu và luôn so sánh kết quả của compareTo()
với 0
a.compareTo(b) = a - b
.
a-b
không bao giờ được sử dụng trong việc triển khai CompareTo () trong mã thực, vì nó có thể (và sẽ) làm tràn.
Trả lời ngắn gọn: (tìm kiếm tình huống của bạn)
Nó có thể được sử dụng để sắp xếp và 0 có nghĩa là "bằng nhau" trong khi -1 và 1 có nghĩa là "ít hơn" và "nhiều hơn (lớn hơn)".
Bất kỳ giá trị trả về nào nhỏ hơn 0 có nghĩa là toán hạng bên trái nhỏ hơn và nếu giá trị lớn hơn 0 thì toán hạng bên trái sẽ lớn hơn.
strcmp()
từ C hoạt động.
int x = thisObject.compareTo(anotherObject);
Các compareTo()
phương thức trả về một giá trị int với các đặc điểm sau:
If thisObject < anotherObject
If thisObject == anotherObject
If thisObject > anotherObject
System.out.println (A.compareTo (B)> 0? "Có": "Không")
nếu giá trị của A> B nó sẽ trả về "Có" hoặc "Không".