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

เผยแพร่แล้ว: 2021-06-02

หากคุณกำลังเรียนรู้เกี่ยวกับ Java และแอปพลิเคชันต่างๆ คุณต้องเคยเจอ HashMap และ HashTable ทั้งคู่เป็นหนึ่งในคลาสที่สำคัญที่สุดในเฟรมเวิร์ก Java Collection คุณจะใช้มันอย่างกว้างขวางในขณะที่พัฒนาด้วย Java ซึ่งเป็นเหตุผลว่าทำไมการเข้าใจความแตกต่างจึงเป็นสิ่งสำคัญ

ในประเด็นต่อไปนี้ เราจะกล่าวถึงหัวข้อ HashTable vs HashMap โดยละเอียดและอธิบายความแตกต่างระหว่างสองสิ่งนี้:

สารบัญ

HashMap คืออะไร?

HashMap อยู่ในคอลเล็กชันของ Java นับตั้งแต่เปิดตัว Java 1.2 ช่วยให้คุณสามารถดำเนินการใช้งานพื้นฐานของอินเทอร์เฟซแผนที่ของ Java HashMap จัดเก็บข้อมูลในคู่ (คีย์, ค่า) และเพื่อเข้าถึง คุณจะต้องใช้ดัชนีประเภทอื่น เช่น จำนวนเต็ม

ที่นี่ คุณใช้วัตถุหนึ่งเป็นคีย์ (ดัชนี) สำหรับวัตถุอื่น (ค่า) ดังนั้นจึงใช้คู่ (คีย์ ค่า) หากคุณเพิ่มคีย์ที่ซ้ำกัน มันจะแทนที่องค์ประกอบของคีย์ที่เกี่ยวข้อง

คุณสมบัติของ HashMap

เพื่อทำความเข้าใจความแตกต่างระหว่าง HashTable กับ HashMap ก่อนอื่น คุณต้องเข้าใจคุณลักษณะของ HashTable มันจะทำให้คุณคุ้นเคยกับพื้นฐานของทั้งสองอย่าง HashMap มีคุณสมบัติดังต่อไปนี้:

  • มันเป็นส่วนหนึ่งของแพ็คเกจ java.util
  • มันขยายคลาสนามธรรม AbstractMap ที่ให้การใช้งานอินเทอร์เฟซแผนที่ไม่สมบูรณ์
  • นอกจากการใช้อินเทอร์เฟซแผนที่แล้ว ยังใช้อินเทอร์เฟซแบบ Serializable และ Cloneable
  • อนุญาตให้มีค่าที่ซ้ำกัน แต่ไม่อนุญาตให้มีคีย์ที่ซ้ำกัน ซึ่งหมายความว่าหนึ่งคีย์ไม่สามารถมีค่าได้มากกว่าหนึ่งค่า แต่หลายคีย์สามารถมีค่าเดียวได้
  • คุณสามารถใช้คีย์ null ได้เพียงครั้งเดียวใน HashMap แต่คุณสามารถใช้ค่า Null ได้หลายค่า
  • มันไม่รับประกันเกี่ยวกับลำดับของแผนที่ โดยเฉพาะอย่างยิ่งว่าลำดับจะคงที่ตลอดเวลาหรือไม่ HashMap เกือบจะคล้ายกับ HashTable แต่ไม่มีการซิงโครไนซ์
  • HashSet ใช้ HashMap ภายใน

HashTable คืออะไร?

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

hashtable เก็บข้อมูลในรูปแบบอาร์เรย์ และทุกค่าข้อมูลมีค่าดัชนีที่ไม่ซ้ำกัน สิ่งนี้ช่วยให้คุณเข้าถึงข้อมูลเฉพาะได้อย่างรวดเร็วหากคุณทราบดัชนีที่จำเป็น

คุณสมบัติของ HashTable

HashTable มีคุณลักษณะเฉพาะ เช่นเดียวกับ HashMap อย่างไรก็ตาม คุณลักษณะเหล่านี้ทำให้มีเอกลักษณ์และแตกต่างจาก HashMap หลายประการ:

  • HashTable ค่อนข้างคล้ายกับ HashMap แต่มีการซิงโครไนซ์
  • มันเก็บคู่คีย์-ค่าไว้ในตารางแฮช
  • ที่นี่ คุณระบุอ็อบเจ็กต์ที่ใช้เป็นคีย์และค่าที่คุณต้องการเชื่อมโยงกับค่าเดียวกัน จากนั้นคุณแฮชคีย์และใช้รหัสแฮชที่สร้างขึ้นเป็นดัชนีที่คุณเก็บค่าไว้ในตาราง
  • ความจุเริ่มต้นของคลาส Hashtable คือ 11 และตัวประกอบการโหลดคือ 0.75
  • HashMap ไม่มีการแจงนับ ในขณะที่ Hashtable ไม่มีการแจงนับที่รวดเร็ว

ความแตกต่างระหว่าง HashMap และ HashTable

เมื่อคุณทราบไฮไลท์เฉพาะของ HashMap และ HashTable แล้ว เราจะเปรียบเทียบและดูความแตกต่างที่เด่นชัดระหว่างสองสิ่งนี้:

HashMap HashTable
มันไม่ซิงโครไนซ์ คุณไม่สามารถแชร์เธรดจำนวนมากที่นี่ได้โดยไม่ต้องใช้รหัสการซิงโครไนซ์ที่เหมาะสม เนื่องจากไม่ปลอดภัยสำหรับเธรด มันถูกซิงโครไนซ์ คุณสามารถแบ่งปันกับหลาย ๆ เธรดได้เนื่องจากเป็นเธรดที่ปลอดภัย
มันสืบทอดคลาส AbstractMap มันสืบทอดคลาสพจนานุกรม
ที่นี่ Iterator ตกอย่างรวดเร็ว ใน HashTable ตัวแจงนับไม่ตกอย่างรวดเร็ว
Iterator จะข้ามผ่าน HashMap Enumerator และ Iterator สำรวจ HashTable
คุณสามารถทำให้ HashMap ซิงโครไนซ์ได้โดยเรียกรหัส
แผนที่ m = Collections.synchronisedMap (hashMap);
ตารางแฮชจะซิงโครไนซ์ภายใน และคุณไม่สามารถยกเลิกการซิงโครไนซ์กับโค้ดใดๆ ได้
มันค่อนข้างเร็ว มันค่อนข้างช้ากว่า HashMap
HashMap เป็นคลาสใหม่และเพิ่งเปิดตัวใน JDK 1.2 HashTable เป็นคลาสดั้งเดิม
อนุญาตให้มีค่า Null หลายค่าและค่า Null หนึ่งคีย์ ไม่อนุญาตให้มีค่า Null หรือคีย์

ตัวอย่างการเข้ารหัส

ต่อไปนี้เป็นตัวอย่างของ HashMap และ HashTable ในที่ทำงาน เพื่อให้คุณสามารถเข้าใจความแตกต่างของ HashMap กับ HashTable

ป้อนข้อมูล:

นำเข้า java.util.*;

นำเข้า java.lang.*;

นำเข้า java.io.*;

JavaTester คลาสสาธารณะ{

โมฆะคงที่สาธารณะหลัก (สตริง args[]){

Hashtable ht=ใหม่ Hashtable();

ht.put(1”อูเดย์”);

ht.put(1”อุจวัล”);

ht.put(2”สุมิต”);

ht.put(3”วิชัย”);

System.out.println(“————-ตารางแฮช————–“);

Set<Integer> ชุดคีย์ = ht.keySet();

สำหรับ (คีย์จำนวนเต็ม: ชุดคีย์) {

System.out.println(คีย์ + ” “+ht.get(คีย์));

}

HashMap hm=ใหม่ HashMap();

hm.put(0,”อูเดย์”);

hm.put(4”อูเดย์”); // คุณสามารถมีค่าที่ซ้ำกันใน hashmap

hm.put(1”สุมิต”);

hm.put(2”วิชัย”);

System.out.println(“———–แผนที่แฮช———–“);

ตั้งค่า <Integer> keySet1 = ht.keySet();

สำหรับ (คีย์จำนวนเต็ม: ชุดคีย์) {

System.out.println(คีย์ + ” “+hm.get(คีย์));

}

}

}

เอาท์พุท:

ตารางแฮช:

3 วิชัย

2 สุมิต

1 อุจวาล

แผนที่แฮช:

0 อุทัย

1 สุมิต

2 วิชัย

4 อุทัย

เมื่อใดควรใช้ HashMap กับ HashTable

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

หากคุณมีสภาพแวดล้อมแบบมัลติเธรด คุณควรใช้ ConcurrentHashMap เพราะมันค่อนข้างคล้ายกับ HashTable ช่วยให้คุณสามารถทำให้ HashMap ซิงโครไนซ์ได้อย่างถูกต้อง

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

เรียนรู้ หลักสูตรซอฟต์แวร์ออนไลน์ จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

บทสรุป

HashMap และ HashTable เป็นโค้ด Java ยอดนิยมที่มีฟังก์ชันคล้ายกัน อย่างไรก็ตาม อย่างที่คุณเห็นมีความแตกต่างที่ชัดเจนหลายประการระหว่างคนทั้งสอง HashMap เป็นคลาส Java ในขณะที่ HashTable เป็นโครงสร้างข้อมูล

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ Java และภาษาการเขียนโปรแกรมอื่นๆ เราแนะนำให้ตรวจสอบ โปรแกรม Executive PG ของเราในด้านการพัฒนาซอฟต์แวร์ด้วยความเชี่ยวชาญพิเศษด้านการพัฒนาแบบครบ วงจร

ตารางแฮชคืออะไร?

ตารางแฮชเป็นโครงสร้างข้อมูลคอนเทนเนอร์ที่ใช้กันอย่างแพร่หลายในการเขียนโปรแกรมคอมพิวเตอร์ ตารางแฮชใช้เพื่อเก็บคู่คีย์-ค่า โดยที่คีย์สามารถเป็นอ็อบเจ็กต์ใดก็ได้ ในฐานะคอนเทนเนอร์ ตารางแฮชควรสนับสนุนการดำเนินการแทรกและนำออก ในฐานะเครื่องมือค้นหา ตารางแฮชควรสนับสนุนการทำงานของ get หากตารางแฮชควรจะเป็นโครงสร้างข้อมูลพจนานุกรม ก็ควรสนับสนุนการทำงานของประกอบด้วย ดังนั้น โดยทั่วไป ตารางแฮชคือโครงสร้างข้อมูลที่ใช้กันอย่างแพร่หลายในการดำเนินการแทรก ลบ รับ และบรรจุอย่างมีประสิทธิภาพ ตารางแฮชใช้กันอย่างแพร่หลายเนื่องจากประสิทธิภาพที่รวดเร็ว

กรอบงานคอลเลกชันใน Java คืออะไร?

Java Collections Framework คือชุดของอินเทอร์เฟซ คลาส และอัลกอริทึมสำหรับแพลตฟอร์ม Java เป็นส่วนหนึ่งของ Java Platform ตั้งแต่เวอร์ชัน 1.2 ประกอบด้วยอินเทอร์เฟซสำหรับคอนเทนเนอร์ รายการ คิว และอื่นๆ แต่ยังรวมถึงคลาสสำหรับจัดการวันที่และเวลา คลาสสำหรับจัดการนิพจน์ทั่วไป คลาสอื่นสำหรับจัดการการทำให้เป็นสากล และอีกคลาสสำหรับจัดการการค้นหาผ่านไฟล์

ความสัมพันธ์ระหว่าง hashtable และ hashmap ใน Java คืออะไร?

hashtable เป็นโครงสร้างข้อมูลพิเศษที่เชื่อมโยงคีย์กับค่าต่างๆ คีย์สามารถเป็นอ็อบเจ็กต์ใดก็ได้ แต่คีย์ทั้งหมดใน hashtable ที่กำหนดจะต้องเทียบเคียงกันได้ (นั่นคือ ใช้อินเทอร์เฟซเดียวกันหรือเข้ากันได้) ใน Java แผนที่เป็นประเภทแฮชเทเบิลเฉพาะที่ดำเนินการโดยใช้ TreeMap คีย์ในแผนที่ต้องใช้วิธีการเท่ากับ และแผนที่ใช้วิธีนี้เพื่อพิจารณาว่าสองคีย์เท่ากันหรือไม่ ซึ่งหมายความว่ามีเพียงคีย์เท่านั้นที่ถูกเก็บไว้ในแผนที่ และค่าที่เกี่ยวข้องจะถูกคำนวณเมื่อใดก็ตามที่จำเป็น