Xem Nhiều 7/2022 # Phương Thức Equals() Và Hashcode() Trong Java # Top Trend

Xem 16,434

Cập nhật thông tin chi tiết về Phương Thức Equals() Và Hashcode() Trong Java mới nhất ngày 07/07/2022 trên website Sansangdethanhcong.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Cho đến thời điểm hiện tại, bài viết này đã đạt được 16,434 lượt xem.

--- Bài mới hơn ---

  • Phương Thức Equals() Và Hashcode() Trong Java 2022
  • Sự Khác Biệt Giữa Phương Thức .equals () Và Toán Tử == Trong Java
  • Phân Biệt “fee”, “fare”, ” Fine”, “toll” Và “charge”
  • Phí Handling Charge Là Gì? Một Số Cơ Bản Cần Nắm Rõ
  • Sự Khác Nhau Giữa Cảm Xúc ‘emotions’ Và Cảm Giác ‘feelings’ Là Gì?
  • Bài viết này giúp bạn hiểu khái niệm 2 phương thức quan trọng: Phương thức equals() và hashCode() trong Java.

    Khi sử dụng các collection, Để nhận được các hành vi mong muốn, chúng ta nên ghi đè các phương thức equals() và hashCode() trong các lớp của các phần tử được thêm vào collection.

    Lớp Object (lớp cha của tất cả các lớp trong Java) định nghĩa hai phương thức equal() và hashCode(). Điều đó có nghĩa là tất cả các lớp trong Java (bao gồm cả các lớp bạn đã tạo) thừa kế các phương thức này. Về cơ bản, lớp Object thực hiện các phương thức này cho mục đích chung.

    Tuy nhiên, bạn sẽ phải ghi đè chúng một cách cụ thể cho các lớp có đối tượng được thêm vào các collection, đặc biệt là các collection dựa trên bảng băm như HashSet và HashMap.

    Phương thức equals() trong Java

    Khi so sánh hai đối tượng với nhau, Java gọi phương thức equals() của chúng trả về true nếu hai đối tượng bằng nhau hoặc false nếu hai đối tượng là khác nhau. Lưu ý rằng phép so sánh sử dụng phương thức equals() so với sử dụng toán tử == là khác nhau.

    Đây là sự khác biệt:

    Phương thức equals() được thiết kế để so sánh hai đối tượng về mặt ngữ nghĩa (bằng cách so sánh các thành viên dữ liệu của lớp), trong khi toán tử == so sánh hai đối tượng về mặt kỹ thuật (bằng cách so sánh các tham chiếu của chúng, nghĩa là địa chỉ bộ nhớ).

    LƯU Ý: Việc cài đặt phương thức equals() trong lớp Object so sánh các tham chiếu của hai đối tượng. Điều đó có nghĩa là bạn nên ghi đè nó trong các lớp của bạn để so sánh ngữ nghĩa. Hầu hết các lớp trong JDK ghi đè phương thức equals() của riêng chúng, chẳng hạn như String, Date, Integer, Double, v.v.

    Ví dụ phương thức equals() của đối tượng String

    Ví dụ điển hình so sánh chuỗi trong Java, để thấy sự khác nhau giữa phương thức equal() và toán tử ==.

    package vn.viettuts; public class EqualExample1 { public static void main(String args) { Student student1 = new Student("123", "Cong", "[email protected]", 22); Student student2 = new Student("123", "Cong", "[email protected]", 22); Student student3 = new Student("456", "Dung", "[email protected]", 18); System.out.println("student1 == student2: " + (student1 == student2)); System.out.println("student1.equals(student2): " + (student1.equals(student2))); System.out.println("student2.equals(student3): " + (student2.equals(student3))); } }

    Kết quả:

    student1 == student2: false student1.equals(student2): true student2.equals(student3): false

    Ví dụ ghi đè phương thức equals() của phần tử của collection

    Ta có lớp chúng tôi có nội dung như sau:

    package vn.viettuts; public class Student { private String id; private String name; private String email; private int age; public Student(String id) { chúng tôi = id; } public Student(String id, String name, String email, int age) { chúng tôi = id; chúng tôi = name; this.email = email; chúng tôi = age; } public String toString() { String studentInfo = "Student " + id; studentInfo += ": " + name; studentInfo += " - " + email; studentInfo += " - " + age; return studentInfo; } public boolean equals(Object obj) { if (obj instanceof Student) { Student another = (Student) obj; if (this.id.equals(another.id)) { return true; } } return false; } }

    Ở đây, phương thức equals() này chỉ so sánh thuộc tính ID của hai đối tượng Student.

    Chúng ta sẽ coi mỗi đối tượng Student có một ID duy nhất, và xem hai đối tượng sinh viên là bằng nhau nếu chúng có ID giống nhau.

    Phương thức contains(Object) của interface List trong java có thể được sử dụng để kiểm tra nếu đối tượng được chỉ định tồn tại trong danh sách. Về bản chất, phương thức equal() được gọi bên trong phương thức contains(Object).

    package vn.viettuts; import java.util.ArrayList; import java.util.List; public class EqualStudent2 { public static void main(String args) { Student student1 = new Student("123", "Cong", "[email protected]", 22); Student student2 = new Student("123", "Cong", "co[email protected]", 22); Student student3 = new Student("456", "Dung", "[email protected]", 18); setStudents.add(student1); setStudents.add(student2); setStudents.add(student3); for (Student student : setStudents) { System.out.println(student); } } }

    Kết quả:

    Student 456: Dung - [email protected] - 18 Student 123: Cong - [email protected] - 22 Student 123: Cong - [email protected] - 22

    Hãy nhìn xem, bạn có nhận thấy rằng có 2 sinh viên trùng lặp (ID: 123), phải không?

    Đây là lý do:

    Tập Set gọi các phương thức equals() và hashCode() trên mỗi đối tượng được thêm vào để đảm bảo không có sự trùng lặp. Trong trường hợp của chúng ta, lớp Student chỉ ghi đè phương thức equals(). Và phương thức hashCode() thừa kế từ lớp Object trả về các địa chỉ bộ nhớ của mỗi đối tượng không nhất quán với phương thức equals(). Do đó, đối tượng Set xử lý đối tượng student1 và student2 thành hai phần tử khác nhau.

    Bây giờ, chúng ta hãy ghi đè phương thức hashCode() trong lớp Student như sau:

    public int hashCode() { return 31 + id.hashCode(); }

    Kết quả:

    Student 123: Cong - [email protected] - 22 Student 456: Dung - [email protected] - 18

    Good! Phần tử trùng lặp hiện đã bị xóa. Đó chính là điều chúng tôi muốn.

    Với các phương thức equals() và hashCode() được ghi đè đúng cách, chúng ta cũng có thể thực hiện tìm kiếm trên tập hợp như sau:

    Student searchStudent = new Student("456"); boolean found = setStudents.contains(searchStudent); System.out.println("Search student: " + found);

    Kết quả:

    Để tự mình thử nghiệm nhiều hơn, hãy thử loại bỏ phương thức equals() hoặc hashCode() và quan sát kết quả.

    Tham khảo

    https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode–

    --- Bài cũ hơn ---

  • Sự Khác Biệt Giữa Các Phương Thức Hashcode () Và Equals () Trong Java Là Gì?
  • Sự Khác Nhau Giữa Though Và Anyway Trong Sử Dụng
  • Sự Khác Nhau Giữa Founder Và Ceo 2022
  • Sự Khác Nhau Giữa Cia Và Fbi 2022
  • So Sánh Sự Khác Nhau Giữa Work Performance Data (Wpd) Và Work Performance Information (Wpi) Trong Kỳ Thi Pmp
  • Bạn đang xem bài viết Phương Thức Equals() Và Hashcode() Trong Java trên website Sansangdethanhcong.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!

  • Web hay
  • Links hay
  • Push
  • Chủ đề top 10
  • Chủ đề top 20
  • Chủ đề top 30
  • Chủ đề top 40
  • Chủ đề top 50
  • Chủ đề top 60
  • Chủ đề top 70
  • Chủ đề top 80
  • Chủ đề top 90
  • Chủ đề top 100
  • Bài viết top 10
  • Bài viết top 20
  • Bài viết top 30
  • Bài viết top 40
  • Bài viết top 50
  • Bài viết top 60
  • Bài viết top 70
  • Bài viết top 80
  • Bài viết top 90
  • Bài viết top 100
  • CẦM ĐỒ TẠI F88
    15 PHÚT DUYỆT
    NHẬN TIỀN NGAY

    VAY TIỀN NHANH
    LÊN ĐẾN 10 TRIỆU
    CHỈ CẦN CMND

    ×