tôi thấy nhận xét này trên can StringBuffer objects be keys in TreeSet in Java?Tôi có cần phương thức equals và Hashcode không nếu lớp của tôi thực hiện so sánh được trong Java?
"Có 2 chiến lược xác định sử dụng với Maps trong Java (hơn hoặc ít hơn)
Băm:. Một đầu vào 'Foo' được chuyển thành một best-như- có thể cố gắng để tạo ra một số truy cập duy nhất một chỉ mục vào một mảng. (Purists, xin đừng lạm dụng tôi, tôi cố ý đơn giản hóa) Chỉ mục này là nơi mà giá trị của bạn được lưu trữ. Có khả năng là "Foo" và "Bar" thực sự tạo ra cùng một giá trị chỉ mục có nghĩa là cả hai sẽ được ánh xạ tới cùng một vị trí mảng, rõ ràng điều này không thể làm việc và do đó đó là phương thức "equals()" được sử dụng để phân biệt
So sánh: Bằng cách sử dụng phương pháp so sánh, bạn không cần bước định hướng bổ sung này vì so sánh KHÔNG BAO GIỜ tạo ra xung đột này ngay từ đầu. Chìa khóa duy nhất mà "Foo" bằng với "Foo". Một ý tưởng thực sự tốt là nếu bạn có thể định nghĩa "equals()" là compareTo() == 0; vì lợi ích nhất quán. . Không phải là một yêu cầu"
câu hỏi của tôi là như sau: nếu lớp học của tôi thực hiện so sánh, sau đó nó có nghĩa là tôi không cần phải ghi đè lên bằng và phương pháp hashcode cho việc sử dụng đối tượng của tôi như là chìa khóa trong bộ sưu tập Hash ví dụ
class Person implements Comparable<Person> {
int id;
String name;
public Person(int id, String name) {
this.id=id;
this.name=name;
}
public int compareTo(Person other) {
return this.id-other.id;
}
}
.
Bây giờ, tôi có thể sử dụng đối tượng Person của tôi trong bộ sưu tập Hashable?
Bạn đã thử chưa? –