Trong Java, phương thức hashCode()
và equals()
đóng vai trò quan trọng trong việc xác định cách mà các đối tượng được so sánh và lưu trữ trong các cấu trúc dữ liệu như HashMap
, HashSet
, và Hashtable
. Dưới đây là tầm quan trọng của hai phương thức này:
equals()
equals()
được sử dụng để xác định xem hai đối tượng có giống nhau hay không. Mặc định, phương thức này so sánh các tham chiếu đối tượng, nhưng thường được ghi đè để so sánh giá trị của các thuộc tính trong các lớp người dùng.equals()
cho phép các lớp tùy chỉnh cách mà đối tượng của chúng được so sánh. Điều này rất quan trọng trong nhiều tình huống, chẳng hạn như khi bạn cần kiểm tra xem hai đối tượng có cùng nội dung hay không.class Person {
String name;
int age;
@Override
public boolean equals(Object obj) {
if (this == obj) return true; // So sánh tham chiếu
if (!(obj instanceof Person)) return false; // Kiểm tra kiểu
Person other = (Person) obj;
return this.name.equals(other.name) && this.age == other.age; // So sánh giá trị
}
}
hashCode()
hashCode()
được sử dụng để trả về một giá trị số nguyên duy nhất cho một đối tượng. Giá trị này thường được sử dụng để xác định vị trí của đối tượng trong các cấu trúc dữ liệu dựa trên bảng băm (hash table).HashMap
hoặc HashSet
, hashCode()
giúp cải thiện hiệu suất của việc tìm kiếm, thêm, và xóa đối tượng bằng cách giảm số lần phải so sánh bằng phương thức equals()
.@Override
public int hashCode() {
return Objects.hash(name, age); // Tạo mã băm dựa trên các thuộc tính
}
equals()
và hashCode()
equals()
trả về true
), thì chúng phải có cùng một giá trị mã băm (hash code).Person person1 = new Person("Alice", 30);
Person person2 = new Person("Alice", 30);
System.out.println(person1.equals(person2)); // true
System.out.println(person1.hashCode() == person2.hashCode()); // true
equals()
, bạn cũng nên ghi đè phương thức hashCode()
. Điều này đảm bảo rằng các đối tượng có giá trị tương đương được xử lý đúng cách trong các cấu trúc dữ liệu băm.hashCode()
giúp cải thiện hiệu suất của việc tìm kiếm và quản lý các đối tượng trong các cấu trúc dữ liệu như HashMap
và HashSet
.Hiểu rõ và sử dụng đúng cách các phương thức hashCode()
và equals()
là rất quan trọng để đảm bảo tính đúng đắn và hiệu suất của ứng dụng Java.