ความแตกต่างระหว่าง HashMap และ Hashtable ใน Java
เนื้อหา
HashMap และ Hashtable ทั้งสองถูกใช้เพื่อเป็นตัวแทนของ กลุ่มวัตถุ ที่แสดงใน
ลองดูแผนภูมิเปรียบเทียบที่แสดงด้านล่างเพื่อเรียนรู้ความแตกต่างระหว่าง HashMap และ Hashtable
- แผนภูมิเปรียบเทียบ
- คำนิยาม
- ความแตกต่างที่สำคัญ
- ความคล้ายคลึงกัน
- ข้อสรุป
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | HashMap | Hashtable |
---|---|---|
Implement / Extend | คลาส HashMap ใช้อินเตอร์เฟส Map และขยายคลาส AbstractMap | Hashtable ครอบคลุมคลาส Dictionary Legacy แต่ได้รับการออกแบบใหม่และตอนนี้ก็ยังใช้งานแผนที่อินเตอร์เฟส |
การประสานข้อมูล | HashMap ไม่ได้ทำการซิงโครไนซ์และด้วยเหตุนี้วัตถุ HashMap จึงไม่ปลอดภัยในเธรด | Hashtable ถูกซิงโครไนซ์และด้วยเหตุนี้วัตถุของ Hashtable เป็นเธรดที่ปลอดภัย |
คีย์ / มูลค่า | คีย์สามารถคืนค่า Null ได้เพียงครั้งเดียว แต่ค่าสามารถส่งกลับค่า Null ได้ทุกเวลา | คีย์ไม่สามารถส่งคืนค่า Null เนื่องจากถูกใช้เพื่อรับรหัสแฮชซึ่งจะใช้เป็นดัชนีของตารางแฮชและค่าจะไม่ส่งกลับค่า Null |
ความจุเริ่มต้นเริ่มต้น | ความจุเริ่มต้นเริ่มต้นของ HashMap คือ 16 | ความจุเริ่มต้นเริ่มต้นของ Hashtable คือ 11 |
ภายใน | HashMap ถูกสำรวจโดย Iterator | เช่นเดียวกับ Map class Hashtable ไม่สนับสนุน Iterator โดยตรงสำหรับการส่งผ่านและด้วยเหตุนี้จึงใช้ Enumerator |
ความหมายของ HashMap
HashMap เป็นคลาสที่ใช้งาน แผนที่ อินเตอร์เฟซและขยาย AbstractMap คลาสใช้ตารางแฮช วัตถุ HashMap หมายถึงชุด / ชุดของ / * K หมายถึงคีย์และ V แทนค่า * / คลาส HashMap ตัวสร้างแรกคือตัวสร้างเริ่มต้นที่เริ่มต้นวัตถุว่างเปล่าของ HashMap ด้วยความจุเริ่มต้นที่ 16 และอัตราการเติมเริ่มต้นที่ 0.75 ตัวสร้างที่สองเริ่มต้นการแฮชแม็พด้วยค่า m ตัวสร้างที่สามสร้างแผนที่แฮชที่มีความจุเริ่มต้นที่สอดคล้องกับค่าที่ให้ไว้ในอาร์กิวเมนต์“ ความจุ” ตัวสร้างที่สี่เริ่มต้นการแฮชแม็พด้วยความจุและอัตราส่วนการเติมที่ระบุในพารามิเตอร์ ให้เราเรียนรู้วิธีการป้อนรายการในแผนที่แฮช Hashmap hm = new Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("จอนนี่", 150); hm.put ("จอร์แดน", 200); System.out.ln (hm); / * output * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200} ในรหัสข้างต้นคุณจะเห็นว่าฉันสร้างวัตถุ HashMap ที่ว่างเปล่า ฮึ่ม ด้วยความจุเริ่มต้นเริ่มต้นและอัตราส่วนการเติมเริ่มต้น จากนั้นฉันแทรกสี่รายการในแผนที่แฮชโดยใช้วิธี put (K, V) ที่จับคู่กุญแจกับค่า คุณสามารถสังเกตได้ว่ารายการไม่ถูกเรียงตามลำดับที่คุณป้อนเนื่องจากลำดับการแทรกไม่ได้รับการแก้ไข ตอนนี้ให้พิจารณากรณีที่คุณมีรายการอยู่แล้ว Hashtable เป็นคลาสที่ขยายความ พจนานุกรม คลาสซึ่งเป็นคลาสดั้งเดิมและถูกปรับโครงสร้างใหม่เพื่อใช้งาน แผนที่ อินเตอร์เฟซ. Hashtable ใช้ตารางแฮชเป็นโครงสร้างข้อมูล Hashtable คล้ายกับ HashMap เช่นกันที่นี่วัตถุของ Hashtable หมายถึงการรวบรวมรายการที่แต่ละรายการเป็นคู่ของ / * K ระบุคีย์และ V ระบุค่าที่เกี่ยวข้องกับคีย์ * / คลาส Hashtable ในโค้ดด้านบนตัวสร้างแรกคือตัวสร้างเริ่มต้นซึ่งสร้างวัตถุว่างของคลาส Hashtable ขนาดเริ่มต้นคือ 11 และอัตราส่วนการเติมเริ่มต้นคือ 0.75 ตัวสร้างที่สองสร้างตารางแฮชที่มีขนาดสอดคล้องกับค่าที่ให้ไว้ในพารามิเตอร์“ ขนาด” ตัวสร้างที่สามสร้างตารางแฮชที่มีขนาดและอัตราส่วนการเติมที่ระบุไว้ในพารามิเตอร์ ตัวสร้างที่สี่เริ่มต้นตารางแฮชด้วยค่า m ให้เราเรียนรู้วิธีการแทรก Hashtable ht = new Hashtable (); ht.put (ใหม่ hashCode (2), 275); ht.put (ใหม่ hashCode (12), 250); ht.put (ใหม่ hashCode (16), 150); ht.put (ใหม่ hashCode (8), 200); System.out.ln (ht); / * output * / {12 = 250, 16 = 150,2y = 275, 8 = 200} ในโค้ดข้างต้นฉันสร้างวัตถุว่างของ Hashtable และแทรกสี่รายการโดยใช้วิธีการ put () ด้านในใส่วิธีฉันเรียกว่า hashCode () ซึ่งคำนวณและส่งกลับค่ารหัสแฮชซึ่งจะทำหน้าที่เป็นค่าดัชนีสำหรับรายการวัตถุ อย่างที่คุณเห็นฉันไม่ได้พูดถึงขนาดของตารางแฮชดังนั้นโดยค่าเริ่มต้นจะเป็น 11 ที่นี่ลำดับการแทรกจะไม่ถูกรักษาไว้และด้วยเหตุนี้เมื่อรายการ ed ไม่ปรากฏตามลำดับที่ป้อน HashMap มีประสิทธิภาพที่ดีกว่าเนื่องจากวัตถุไม่ได้ซิงโครไนซ์และหลายเธรดสามารถทำงานกับมันได้ในเวลาเดียวกันดังนั้นจึงเร็วกว่า Hashtable
ความหมายของ Hashtable
ความคล้ายคลึงกัน:
สรุป: