ตารางแฮชเป็นที่รู้จักกันในชื่อรายการแจกจ่ายซึ่งเป็นโครงสร้างคลาสคอลเลกชันที่ใช้ในการจัดเก็บวัตถุกลุ่ม
ตารางแฮชคืออะไร
ทั้งอาร์เรย์และเวกเตอร์สามารถจัดเก็บวัตถุได้ แต่ตำแหน่งการจัดเก็บของวัตถุนั้นเป็นแบบสุ่มนั่นคือไม่มีการเชื่อมต่อที่จำเป็นระหว่างวัตถุและตำแหน่งการจัดเก็บ เมื่อคุณต้องการค้นหาวัตถุคุณสามารถเปรียบเทียบกับแต่ละองค์ประกอบในลำดับที่แน่นอน (เช่นการค้นหาตามลำดับหรือการค้นหาสองจุด) ลดลงอย่างมีนัยสำคัญ
วิธีการจัดเก็บข้อมูลที่มีประสิทธิภาพคือมันไม่ได้เปรียบเทียบกับองค์ประกอบอื่น ๆ และบันทึกที่สามารถรับได้ในแต่ละครั้ง สิ่งนี้ต้องการการสร้างความสัมพันธ์ที่สอดคล้องกันเฉพาะระหว่างตำแหน่งการจัดเก็บของวัตถุและแอตทริบิวต์คีย์ของวัตถุ (ตั้งค่าเป็น k) เพื่อให้สอดคล้องกับแต่ละวัตถุที่สอดคล้องกับตำแหน่งการจัดเก็บที่ไม่ซ้ำกัน เมื่อค้นหาเพียงคำนวณค่าของ F (k) ตามแอตทริบิวต์หลักของวัตถุที่จะตรวจสอบ หากวัตถุนี้อยู่ในคอลเลกชันมันจะต้องอยู่ในตำแหน่งที่เก็บ F (k) ดังนั้นจึงไม่จำเป็นต้องเปรียบเทียบกับองค์ประกอบอื่น ๆ ในชุด เรียกว่าความสัมพันธ์ที่สอดคล้องกันนี้เป็นวิธีแฮชและตารางที่จัดตั้งขึ้นตามแนวคิดนี้คือตารางแฮช
Java ใช้หมวดหมู่ Hashtable เพื่อให้ได้ตารางแฮช
•กำลังการผลิต: ความสามารถของแฮชต์ไม่ได้รับการแก้ไขและความสามารถของวัตถุสามารถเพิ่มขึ้นโดยอัตโนมัติ
•คีย์ (คีย์): วัตถุที่เก็บข้อมูลแต่ละรายการต้องใช้คำหลัก คำหลักทั้งหมดใน Hashtable นั้นไม่ซ้ำกัน
•รหัสแฮช: หากคุณต้องการจัดเก็บวัตถุไว้ในแฮชเชิลคุณต้องแมปคีย์คำหลักกับข้อมูลจำนวนเต็มเพื่อเป็นรหัสแฮชของคีย์
•รายการ: แฮชแต่ละตัวมีสองโดเมนซึ่งเป็นคีย์โดเมนคำหลักและค่าโดเมนค่า (วัตถุที่เก็บข้อมูล) ทั้งคีย์และค่าสามารถเป็นวัตถุประเภทวัตถุ แต่ไม่สามารถว่างเปล่าได้
•ปัจจัยโหลด: ปัจจัยการเติมแสดงด้วยความสมบูรณ์ของตารางแฮชและค่าของมันเท่ากับความยาวของจำนวนองค์ประกอบมากกว่าตารางแฮชด้านบน
การใช้ตารางแฮช
มีวิธีการก่อสร้างหลักสามรูปแบบสำหรับตารางแฮช:
hashtable ();
Hashtable (ความจุ int);
Hashtable (ความจุ int, float loadfactor)
วิธีการหลักของตารางแฮชแสดงในตารางที่ 8-6
ตารางที่ 8-6 วิธีการบ่อยครั้งที่กำหนดโดยคำจำกัดความตารางแฮช
วิธี | การทำงาน |
---|---|
เป็นโมฆะชัดเจน () | อีกครั้งและล้างตารางแฮช |
บูลีนประกอบด้วย (ค่าวัตถุ) | ตรวจสอบว่าตารางแฮชมีวัตถุที่กำหนดหรือไม่หากมีการส่งคืนจริงไม่เช่นนั้นจะส่งคืนเท็จ |
บูลีนมีคีย์ (คีย์วัตถุ) | ตรวจสอบว่าตารางแฮชมีคำหลักที่กำหนดหรือไม่หากมีการส่งคืนสู่ความจริงมิฉะนั้นจะส่งคืนเท็จ |
บูลีน isempty () | ยืนยันว่าตารางแฮชนั้นว่างเปล่าหรือไม่ถ้าคุณกลับไปที่จริงมิฉะนั้นจะส่งคืนเท็จ |
Object Get (Key Object) | วัตถุที่จะได้รับคำหลักที่เกี่ยวข้องหากไม่มีการส่งคืนค่า null |
โมฆะ rehash () | ไม่ว่า Howh ตารางแฮชการขยายตัวสามารถประหยัดองค์ประกอบได้มากขึ้น |
ใส่วัตถุ (คีย์วัตถุค่าวัตถุ) | บันทึกวัตถุไปยังตารางแฮชด้วยคำหลักที่กำหนด |
ลบวัตถุ (คีย์วัตถุ) | ลบวัตถุที่สอดคล้องกับเฟสคำหลักออกจากตารางแฮชหากวัตถุไม่กลับไปที่ null |
ขนาด int () | กลับไปที่ขนาดของตารางแฮช |
สตริง toString () | แปลงเนื้อหาของตารางแฮชเป็นสตริง |
การสร้างตารางแฮชยังสามารถนำไปใช้กับผู้ให้บริการใหม่ คำแถลงของมันคือ:
Havetable มี = hashtable ใหม่ ();
ตัวอย่าง:
[ตัวอย่าง 8-12] การสำรวจตารางแฮช
// ************ EP8_12.java ***************************** ******************************************************** ******************* นำเข้า Java.util.*; มี. พ.ศ. ("หนึ่ง", จำนวนเต็มใหม่ (1)); ", ใหม่สองครั้ง (12.3)); set s = have.keyset (); สำหรับ (iterator <string> i = s.iterator (); i.hasnext ();) {system.out.println (มี. i.next ()));}}}
เรียกใช้ผลลัพธ์:
21312.3