ความแตกต่างระหว่าง HashMap และ Hashtable ใน Java

ผู้เขียน: Laura McKinney
วันที่สร้าง: 2 เมษายน 2021
วันที่อัปเดต: 5 พฤษภาคม 2024
Anonim
#12 - Difference b/w ConcurrentHashMap & SynchronizedMap in Java || (HashTable vs HashMap)
วิดีโอ: #12 - Difference b/w ConcurrentHashMap & SynchronizedMap in Java || (HashTable vs HashMap)

เนื้อหา


HashMap และ Hashtable ทั้งสองถูกใช้เพื่อเป็นตัวแทนของ กลุ่มวัตถุ ที่แสดงใน คู่. แต่ละ คู่เรียกว่า การเข้า วัตถุ. ชุด รายการจะถูกเรียกโดยวัตถุของ HashMap และ Hashtable กุญแจในคอลเลกชันจะต้องไม่ซ้ำกันหรือโดดเด่น ความแตกต่างระหว่าง HashMap และ Hashtable คือ HashMap โดยเฉพาะอย่างยิ่งใช้ส่วนต่อประสานกับแผนที่ในขณะที่ Hashtable ขยายคลาส Dictionary (คลาสดั้งเดิม) ซึ่งปรับโครงสร้างใหม่เพื่อใช้ส่วนต่อประสานแผนที่ ความแตกต่างที่สำคัญอื่น ๆ คือวัตถุของ HashMap คือ หมู่ ในขณะที่วัตถุของ Hashtable คือ ทำข้อมูลให้ตรงกัน.

ลองดูแผนภูมิเปรียบเทียบที่แสดงด้านล่างเพื่อเรียนรู้ความแตกต่างระหว่าง HashMap และ Hashtable

  1. แผนภูมิเปรียบเทียบ
  2. คำนิยาม
  3. ความแตกต่างที่สำคัญ
  4. ความคล้ายคลึงกัน
  5. ข้อสรุป

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบHashMapHashtable
Implement / Extendคลาส HashMap ใช้อินเตอร์เฟส Map และขยายคลาส AbstractMapHashtable ครอบคลุมคลาส 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 หมายถึงชุด / ชุดของ จับคู่ที่แต่ละคีย์ถูกแมปกับค่าเฉพาะ คีย์ในคอลเล็กชันต้องไม่ซ้ำกันเนื่องจากใช้เพื่อเรียกคืนค่า ในทางกลับกันค่าในคอลเลกชันสามารถทำซ้ำได้ การประกาศของคลาส HashMap และตัวสร้างของ HashMapclass มีดังนี้:

/ * K หมายถึงคีย์และ V แทนค่า * / คลาส HashMap / * Constructors ของคลาส HashMap * / HashMap () HashMap (แผนที่ <? ขยาย K,? ขยาย V> m) HashMap (ความจุ int) HashMap (ความจุ int, float fillRatio)

ตัวสร้างแรกคือตัวสร้างเริ่มต้นที่เริ่มต้นวัตถุว่างเปล่าของ 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) ที่จับคู่กุญแจกับค่า คุณสามารถสังเกตได้ว่ารายการไม่ถูกเรียงตามลำดับที่คุณป้อนเนื่องจากลำดับการแทรกไม่ได้รับการแก้ไข ตอนนี้ให้พิจารณากรณีที่คุณมีรายการอยู่แล้ว ในแผนที่แฮชและหลังจากนั้นคุณพยายามแทรก put (K1, V5) เช่นคุณลองแมปคีย์เดียวกันด้วยค่าที่แตกต่างกัน จากนั้นวิธีการใส่จะแทนที่ค่าเก่า V1 ด้วยค่าใหม่ V2 และส่งกลับค่าเก่า V1 มิฉะนั้นถ้าเราไม่เคยลองเปลี่ยนค่าของคีย์จากนั้นวิธีการใส่จะส่งกลับ Null สำหรับคีย์นั้น

ความหมายของ Hashtable

Hashtable เป็นคลาสที่ขยายความ พจนานุกรม คลาสซึ่งเป็นคลาสดั้งเดิมและถูกปรับโครงสร้างใหม่เพื่อใช้งาน แผนที่ อินเตอร์เฟซ. Hashtable ใช้ตารางแฮชเป็นโครงสร้างข้อมูล Hashtable คล้ายกับ HashMap เช่นกันที่นี่วัตถุของ Hashtable หมายถึงการรวบรวมรายการที่แต่ละรายการเป็นคู่ของ . ปุ่มทั้งหมดในคอลเลกชันจะต้องไม่ซ้ำกันในทางกลับกันค่าสามารถทำซ้ำได้ คีย์ถูกใช้เป็นพิเศษเพื่อรับค่ารหัสแฮชซึ่งเป็นตัวตัดสินดัชนีโดยที่ คู่จะถูกเก็บไว้ในตารางแฮช ในตารางแฮชทั้งคีย์และค่าไม่สามารถส่งกลับตัวชี้ Null ให้เราเห็นการประกาศของคลาส Hashtable และตัวสร้างของคลาส hashtable

/ * K ระบุคีย์และ V ระบุค่าที่เกี่ยวข้องกับคีย์ * / คลาส Hashtable / constructors ของ Hashtable * / Hashtable () Hashtable (ขนาด int) Hashtable (ขนาด int, float fillRatio) Hashtable (แผนที่ <? ขยาย K, ขยาย V> m)

ในโค้ดด้านบนตัวสร้างแรกคือตัวสร้างเริ่มต้นซึ่งสร้างวัตถุว่างของคลาส 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 ไม่ปรากฏตามลำดับที่ป้อน

  1. HashMap ดำเนินการ แผนที่ อินเตอร์เฟสและขยายคลาสนามธรรม AbstractMap ในขณะที่ Hashtable ขยายระดับนามธรรม พจนานุกรมซึ่งเป็นคลาส Legacy ซึ่งภายหลังถูกปรับโครงสร้างใหม่เพื่อใช้งาน แผนที่ อินเตอร์เฟซ.
  2. วัตถุ HashMap คือ หมู่ เช่นหลายเธรดสามารถทำงานกับมันในเวลาเดียวกันและด้วยเหตุนี้มันวัตถุไม่ปลอดภัยเธรด ในทางกลับกันวัตถุของ Hashtable คือ ทำข้อมูลให้ตรงกัน เช่นถ้าเธรดต้องการใช้งานบนวัตถุของ Hashtable จะต้องได้รับการล็อกบนวัตถุนั้นเพื่อให้ไม่มีเธรดอื่นสามารถเข้าถึงวัตถุนั้นและดังนั้นจึงเป็นเธรดที่ปลอดภัย
  3. ในคีย์ HashMap สามารถส่งคืนได้ ว่างเปล่าเพียงครั้งเดียวและคุณค่าสามารถกลับมา ว่างเปล่าหลายครั้ง. ในทางกลับกันคีย์ไม่สามารถส่งคืนค่า Null เนื่องจากใช้เพื่อรับค่ารหัสแฮชซึ่งใช้เป็นดัชนีในการจัดเก็บ คู่และหรือค่าสามารถกลับเป็นศูนย์
  4. ความจุเริ่มต้นของตารางแฮชในคลาส HashMap คือ 16 ในขณะที่ความจุเริ่มต้นของตารางแฮชใน Hashtable คือ 11.
  5. iterator สามารถสำรวจรายการ Hashmap ในทางตรงกันข้าม Hashtable ไม่สนับสนุน Iterator โดยตรงและโดยทั่วไปแล้ว แจงนับ จะใช้สำหรับการสำรวจรายการใน Hashtable

ความคล้ายคลึงกัน:

  • HashMap และ Hashtable ทั้งคู่ใช้โครงสร้างข้อมูลของ ตารางแฮช.
  • HashMap และ Hashtable ทั้งสองดำเนินการ แผนที่ อินเตอร์เฟซ
  • คำสั่งแทรกไม่ได้รับการเก็บรักษาไว้ ทั้งใน HashMap และ Hashtable และขึ้นอยู่กับรหัสแฮชที่ได้รับโดยใช้คีย์
  • ใน HashMap และ Hashtable ต้องมีคีย์ เป็นเอกลักษณ์ ในขณะที่ค่าสามารถ ซ้ำ.
  • HashMap และ Hashtable ทั้งสองสามารถมี วัตถุที่ต่างกัน สำหรับทั้งกุญแจและค่า
  • HashMap และ Hashtable ทั้งสองดำเนินการ serializable และ Cloneable อินเตอร์เฟส แต่ ไม่เข้าถึงแบบสุ่ม.
  • HashMap และ Hashtable ทั้งคู่มีอัตราส่วนการเติมเริ่มต้น 0.75.
  • HashMap และ Hashtable ทั้งคู่เหมาะสำหรับการดึงข้อมูลหรือ ค้นหา การดำเนินงาน

สรุป:

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