ความแตกต่างระหว่างเท่ากับและแฮชโค้ดใน Java

สารบัญ:

ความแตกต่างระหว่างเท่ากับและแฮชโค้ดใน Java
ความแตกต่างระหว่างเท่ากับและแฮชโค้ดใน Java

วีดีโอ: ความแตกต่างระหว่างเท่ากับและแฮชโค้ดใน Java

วีดีโอ: ความแตกต่างระหว่างเท่ากับและแฮชโค้ดใน Java
วีดีโอ: Java HashMap: hashcode vs equals 2024, พฤศจิกายน
Anonim

ความแตกต่างที่สำคัญ – เท่ากับ vs hashCode ใน Java

ค่าเท่ากับคล้ายกับตัวดำเนินการ==ซึ่งก็คือการทดสอบเอกลักษณ์ของวัตถุมากกว่าความเท่าเทียมกันของวัตถุ hashCode เป็นวิธีการที่คลาสแบ่งย่อยข้อมูลที่จัดเก็บไว้ในอินสแตนซ์ของคลาสโดยนัยหรือโดยชัดแจ้งเป็นค่าแฮชเดียว ซึ่งเป็นจำนวนเต็มที่ลงนาม 32 บิต ความแตกต่างที่สำคัญระหว่าง equals และ hashCode ใน Java ก็คือ ความเท่าเทียมนั้นใช้เพื่อเปรียบเทียบสองอ็อบเจ็กต์ ในขณะที่ hashCode ใช้ในการแฮชเพื่อตัดสินใจว่าควรจัดหมวดหมู่ออบเจ็กต์กลุ่มใด

Java เท่ากับเท่าไหร่

วิธีเท่ากับใช้เพื่อเปรียบเทียบวัตถุสองชิ้นค่าดีฟอลต์เท่ากับวิธีการที่กำหนดไว้ในคลาสอ็อบเจ็กต์ การใช้งานนั้นคล้ายกับตัวดำเนินการ==การอ้างอิงวัตถุทั้งสองจะเท่ากันก็ต่อเมื่อชี้ไปที่วัตถุเดียวกัน เป็นไปได้ที่จะแทนที่วิธีการเท่ากับ

ความแตกต่างระหว่างเท่ากับและ hashCode ใน Java
ความแตกต่างระหว่างเท่ากับและ hashCode ใน Java

รูปที่ 01: โปรแกรม Java เท่ากับ

คำสั่ง System.out.println(s1.equals(s2)) จะให้คำตอบเป็นเท็จเพราะ s1 และ s2 อ้างถึงวัตถุสองชิ้นที่แตกต่างกัน คล้ายกับคำสั่ง System.out.println(s1==s2);

คำสั่ง System.out.println(s1.equals(s3)) จะให้คำตอบเป็นจริงเพราะ s1 และ s3 อ้างถึงวัตถุเดียวกัน คล้ายกับคำสั่ง System.out.println(s1==s3);

ในชั้นเรียนนักเรียนไม่มีทางเท่ากัน ดังนั้นจึงเรียกว่าเท่ากับในคลาส Object True จะแสดงก็ต่อเมื่อการอ้างอิงวัตถุชี้ไปที่วัตถุเดียวกัน

ความแตกต่างระหว่างเท่ากับและ hashCode ใน Java_Figure 02
ความแตกต่างระหว่างเท่ากับและ hashCode ใน Java_Figure 02

รูปที่ 02: โปรแกรม Java ที่มีการแทนที่เท่ากับ

ตามโปรแกรมด้านบน วิธีเท่ากับถูกแทนที่ ออบเจ็กต์ถูกส่งไปยังเมธอด และเป็นประเภทส่งไปยัง Student จากนั้น ค่า id จะถูกตรวจสอบ ถ้าค่า id ใกล้เคียงกัน มันจะคืนค่า true ถ้าไม่เช่นนั้นจะคืนค่าเท็จ รหัสของ s1 และ s2 มีความคล้ายคลึงกัน ดังนั้นมันจะพิมพ์จริง รหัสของ s1 และ s3 ก็คล้ายกัน ดังนั้นมันจะพิมพ์จริง

hashCode ใน Java คืออะไร

hashCode ใช้ในการแฮชเพื่อตัดสินใจว่าควรจัดหมวดหมู่วัตถุในกลุ่มใด กลุ่มของวัตถุสามารถแบ่งปัน hashCode เดียวกันได้ ฟังก์ชันแฮชที่ถูกต้องสามารถกระจายอ็อบเจ็กต์ออกเป็นกลุ่มต่างๆ ได้เท่าๆ กัน

hashCode ที่ถูกต้องสามารถมีคุณสมบัติดังนี้สมมติว่ามีสองวัตถุเป็น obj1 และ obj2 ถ้า obj1.equals(obj2) เป็นจริง ดังนั้น obj1.hashCode() จะเท่ากับ obj2.hashCode() หาก obj1.equals(obj2) เป็นเท็จ ไม่จำเป็นที่ obj1.hashCode() จะต้องไม่เท่ากับ obj2.hashCode() ออบเจ็กต์ที่ไม่เท่ากันทั้งสองอาจมี hashCode เหมือนกัน

ความแตกต่างระหว่างเท่ากับและ hashCode ใน Java_Figure 03
ความแตกต่างระหว่างเท่ากับและ hashCode ใน Java_Figure 03

รูปที่ 03: ชั้นเรียนของนักเรียนที่มีค่าเท่ากับและแฮชโค้ด

ความแตกต่างที่สำคัญระหว่างเท่ากับและ hashCode ใน Java
ความแตกต่างที่สำคัญระหว่างเท่ากับและ hashCode ใน Java

ภาพที่ 04: โปรแกรมหลัก

ชั้นเรียนของนักเรียนประกอบด้วยเมธอด equals และ hashCode วิธีเท่ากับในคลาส Student จะได้รับวัตถุ หากวัตถุเป็นโมฆะ จะส่งกลับค่าเท็จถ้าคลาสของอ็อบเจ็กต์ไม่เหมือนกัน มันจะคืนค่าเท็จ ค่า id ถูกตรวจสอบในวัตถุทั้งสอง หากคล้ายกันก็จะคืนค่าเป็นจริง มิฉะนั้นจะคืนค่าเท็จ

ในโปรแกรมหลัก วัตถุ s1 และ s2 จะถูกสร้างขึ้น เมื่อเรียก s1.equals(s2) จะให้เป็นจริง เนื่องจากเมธอด equals ถูกแทนที่ และจะตรวจสอบค่า id ของทั้งสองอ็อบเจ็กต์ แม้ว่าพวกเขาจะอ้างถึงวัตถุสองชิ้น แต่คำตอบก็เป็นจริงเพราะค่า id ของ s1 และ s2 เหมือนกัน เนื่องจาก s1.equals(s2) เป็นจริง hashCode ของ s1 และ s2 ควรเท่ากัน การพิมพ์ hashCode ของ s1 และ s2 จะให้ค่าเท่ากัน สามารถใช้วิธี hashCode กับคอลเลกชั่น เช่น HashMap

ความแตกต่างระหว่าง equals และ hashCode ใน Java คืออะไร

เท่ากับเทียบกับ hashCode ใน Java

equals เป็นวิธีการใน Java ที่ทำหน้าที่คล้ายกับตัวดำเนินการ==ซึ่งใช้ทดสอบเอกลักษณ์ของวัตถุมากกว่าความเท่าเทียมกันของวัตถุ hashCode เป็นวิธีการที่คลาสแบ่งย่อยข้อมูลที่จัดเก็บไว้ในอินสแตนซ์ของคลาสเป็นค่าแฮชเดียวโดยปริยายหรือชัดเจน
การใช้งาน
วิธีการเท่ากับใช้เพื่อเปรียบเทียบสองวัตถุ วิธีการนี้ใช้ในการแฮชเพื่อตัดสินใจว่าควรวางวัตถุในกลุ่มใด

สรุป – เท่ากับเทียบกับ hashCode ใน Java

ความแตกต่างในเท่ากับและ hashCode ใน Java คือ ความเท่าเทียมกันถูกใช้เพื่อเปรียบเทียบสองวัตถุในขณะที่ hashCode ใช้ในการแฮชเพื่อตัดสินใจว่าควรจัดหมวดหมู่วัตถุกลุ่มใด

แนะนำ: