Tôi đã thấy các lớp thực hiện cả So sánh và So sánh . Điều đó có nghĩa là gì? Tại sao tôi lại dùng cái này?
Tôi đã thấy các lớp thực hiện cả So sánh và So sánh . Điều đó có nghĩa là gì? Tại sao tôi lại dùng cái này?
Câu trả lời:
Văn bản dưới đây đến từ So sánh so với so sánh
So sánh
Một đối tượng có thể so sánh có khả năng so sánh chính nó với một đối tượng khác. Bản thân lớp phải thực hiện java.lang.Comparable
giao diện để có thể so sánh các thể hiện của nó.
So sánh
Một đối tượng so sánh có khả năng so sánh hai đối tượng khác nhau. Lớp này không so sánh các thể hiện của nó, nhưng một số thể hiện của lớp khác. Lớp so sánh này phải thực hiện java.util.Comparator
giao diện.
Triển khai Comparable
có nghĩa là " Tôi có thể so sánh bản thân mình với một đối tượng khác. " Điều này thường hữu ích khi có một so sánh mặc định tự nhiên duy nhất.
Việc triển khai Comparator
có nghĩa là " Tôi có thể so sánh hai đối tượng khác. " Điều này thường hữu ích khi có nhiều cách so sánh hai trường hợp của một loại - ví dụ: bạn có thể so sánh mọi người theo độ tuổi, tên, v.v.
Person
thực hiện Comparable
, bởi vì sau đó bạn không thể thay đổi cách so sánh hai người.
Person
. 2) Bộ so sánh, ví dụ PersonAgeComparator
có thể so sánh hai thực thể khác nhau và quyết định cái nào sẽ đến trước theo thứ tự sắp xếp cụ thể đó. 3) Mã sắp xếp, lấy một tập hợp các thực thể và một bộ so sánh và sắp xếp bộ sưu tập đó bằng cách sử dụng bộ so sánh để xác định thứ tự.
So sánh cho phép một lớp thực hiện so sánh của riêng mình:
Để so sánh, so sánh là một so sánh bên ngoài:
Trong cả hai triển khai, bạn vẫn có thể chọn những gì bạn muốn được so sánh . Với generic, bạn có thể khai báo như vậy và kiểm tra nó tại thời gian biên dịch. Điều này cải thiện sự an toàn, nhưng nó cũng là một thách thức để xác định giá trị phù hợp.
Theo hướng dẫn, tôi thường sử dụng lớp hoặc giao diện chung nhất mà đối tượng có thể so sánh được, trong tất cả các trường hợp sử dụng tôi hình dung ... Mặc dù không phải là một định nghĩa rất chính xác! :-(
Comparable<Object>
cho phép bạn sử dụng nó trong tất cả các mã tại thời gian biên dịch (tốt nếu cần hoặc xấu nếu không và bạn mất lỗi thời gian biên dịch); việc thực hiện của bạn phải đối phó với các đối tượng và thực hiện khi cần thiết nhưng theo một cách mạnh mẽ.Comparable<Itself>
là rất nghiêm ngặt trái lại.Thật buồn cười, khi bạn phân lớp chính nó thành Lớp con, Lớp con cũng phải được so sánh và mạnh mẽ về nó (hoặc nó sẽ phá vỡ Nguyên tắc Liskov và cung cấp cho bạn lỗi thời gian chạy).
java.lang.Comparable
Để thực hiện Comparable
giao diện, lớp phải thực hiện một phương thức duy nhấtcompareTo()
int a.compareTo(b)
Bạn phải sửa đổi lớp mà cá thể bạn muốn sắp xếp. Vì vậy, chỉ có một chuỗi sắp xếp có thể được tạo ra cho mỗi lớp.
java.util.Comparator
Để thực hiện giao diện Trình so sánh, lớp phải thực hiện một phương thức duy nhất compare()
int compare (a,b)
Comparable
thường được ưa thích. Nhưng đôi khi một lớp đã thực hiện Comparable
, nhưng bạn muốn sắp xếp trên một thuộc tính khác. Sau đó, bạn buộc phải sử dụng a Comparator
.
Một số lớp học thực sự cung cấp Comparators
cho các trường hợp phổ biến; ví dụ, String
s theo mặc định phân biệt chữ hoa chữ thường khi được sắp xếp, nhưng cũng có một lệnh Comparator
gọi tĩnh CASE_INSENSITIVE_ORDER
.
Dưới đây là một vài điểm khác biệt giữa So sánh và So sánh tôi tìm thấy trên web:
Nếu bạn thấy sự khác biệt logic giữa hai cái này là So sánh trong Java thì so sánh hai đối tượng được cung cấp cho anh ta, trong khi giao diện so sánh so sánh tham chiếu "này" với đối tượng được chỉ định.
So sánh trong Java được sử dụng để thực hiện thứ tự tự nhiên của đối tượng. Trong Chuỗi API Java, các lớp Ngày và trình bao bọc thực hiện giao diện So sánh.
Nếu bất kỳ lớp nào thực hiện giao diện so sánh trong Java thì bộ sưu tập của đối tượng đó có thể được sắp xếp tự động bằng cách sử dụng phương thức Collections.sort () hoặc Array.sort () theo thứ tự tự nhiên được xác định theo phương thức so sánh.
Các đối tượng triển khai Có thể so sánh trong Java có thể được sử dụng làm khóa trong bản đồ được sắp xếp hoặc các phần tử trong một tập hợp được sắp xếp, ví dụ TreeSet, mà không chỉ định bất kỳ Trình so sánh nào.
trang web: Làm thế nào để sử dụng Trình so sánh và So sánh trong Java? Ví dụ
Đọc thêm: Làm thế nào để sử dụng Trình so sánh và So sánh trong Java? Ví dụ
Comparable
là cho các đối tượng với một trật tự tự nhiên. Các đối tượng tự biết làm thế nào để được ra lệnh.
Comparator
dành cho các đối tượng không có thứ tự tự nhiên hoặc khi bạn muốn sử dụng một thứ tự khác.
Sự khác biệt giữa giao diện so sánh và so sánh
Comparable
được sử dụng để so sánh chính nó bằng cách sử dụng với một đối tượng khác.
Comparator
được sử dụng để so sánh hai kiểu dữ liệu là các đối tượng.
Nếu bạn thấy sự khác biệt logic giữa hai cái này là Comparator
trong Java, hãy so sánh hai đối tượng được cung cấp cho anh ta, trong khi Comparable
giao diện so sánh tham chiếu "này" với đối tượng được chỉ định.
Comparable
trong Java được sử dụng để thực hiện thứ tự tự nhiên của đối tượng. Trong Chuỗi API Java, các lớp Date và Wrapper triển khai Comparable
giao diện.
Nếu bất kỳ lớp nào thực hiện Comparable
giao diện trong Java thì bộ sưu tập của đối tượng đó List
hoặc Array
có thể được sắp xếp tự động bằng cách sử dụng Collections.sort()
hoặc Array.sort()
phương thức và đối tượng sẽ được sắp xếp dựa trên thứ tự tự nhiên được xác định bởi compareTo
phương thức.
Các đối tượng triển khai Comparable
trong Java có thể được sử dụng làm khóa trong bản đồ được sắp xếp hoặc các phần tử trong một tập hợp được sắp xếp chẳng hạn TreeSet
, mà không chỉ định bất kỳ Comparator
.
Lib chú thích của tôi để thực hiện so sánh và so sánh:
public class Person implements Comparable<Person> {
private String firstName;
private String lastName;
private int age;
private char gentle;
@Override
@CompaProperties({ @CompaProperty(property = "lastName"),
@CompaProperty(property = "age", order = Order.DSC) })
public int compareTo(Person person) {
return Compamatic.doComparasion(this, person);
}
}
Nhấp vào liên kết để xem thêm ví dụ. tính toán