คลาสแฮช
Hashtable สืบทอดอินเทอร์เฟซแผนที่และใช้ตารางแฮชด้วยการทำแผนที่ค่าคีย์ วัตถุที่ไม่ใช่ NULL ใด ๆ สามารถใช้เป็นคีย์หรือค่า
ใช้ใส่ (คีย์, ค่า) เพื่อเพิ่มข้อมูลใช้ GET (คีย์) เพื่อดึงข้อมูล ค่าใช้จ่ายเหนือศีรษะของการดำเนินการพื้นฐานทั้งสองนี้คงที่
Hashtable ปรับประสิทธิภาพผ่านพารามิเตอร์ความจุเริ่มต้นและพารามิเตอร์ปัจจัยโหลด โดยปกติแล้วปัจจัยโหลดเริ่มต้น 0.75 สามารถบรรลุความสมดุลเวลาและพื้นที่ได้ดีขึ้น การเพิ่มปัจจัยโหลดสามารถประหยัดพื้นที่ได้ แต่เวลาการค้นหาที่สอดคล้องกันจะเพิ่มขึ้นซึ่งจะส่งผลกระทบต่อการดำเนินงานเช่น Get and Put
ตัวอย่างง่ายๆของการใช้แฮชช์มีดังนี้: ใส่ 1, 2 และ 3 ลงในแฮชแต้มและกุญแจของพวกเขาคือ "หนึ่ง", "สอง", "สาม" ตามลำดับ:
หมายเลขแฮชเทเบอร์ = ใหม่ hashtable (); numbers.put ("หนึ่ง", จำนวนเต็มใหม่ (1)); numbers.put ("สอง", จำนวนเต็มใหม่ (2)); numbers.put ("สาม", จำนวนเต็มใหม่ (3));หากต้องการนำตัวเลขออกมาเช่น 2 ให้ใช้คีย์ที่เกี่ยวข้อง:
จำนวนเต็ม n = (จำนวนเต็ม) numbers.get ("สอง"); system.out.println ("สอง =" + n);เนื่องจากวัตถุเป็นคีย์จะกำหนดตำแหน่งของค่าที่สอดคล้องกันโดยการคำนวณฟังก์ชั่นแฮชวัตถุใด ๆ ที่เป็นคีย์ต้องใช้วิธี HashCode และ Equals วิธีการ HashCode และ Equals สืบทอดมาจากวัตถุระดับราก หากคุณใช้คลาสที่กำหนดเองเป็นคีย์ต้องระวังให้มาก ตามคำจำกัดความของฟังก์ชั่นแฮชหากวัตถุทั้งสองเหมือนกันนั่นคือ obj1.equals (obj2) = จริง hashcode ของพวกเขาจะต้องเหมือนกัน แต่ถ้าวัตถุทั้งสองแตกต่างกัน hashcodes ของพวกเขาอาจไม่แตกต่างกัน หาก hashcodes ของวัตถุสองวัตถุที่แตกต่างกันเหมือนกันปรากฏการณ์นี้เรียกว่าความขัดแย้ง ความขัดแย้งจะเพิ่มเวลาค่าใช้จ่ายในการดำเนินงานตารางแฮช ดังนั้นลองกำหนดวิธี HashCode () เพื่อเพิ่มความเร็วในการทำงานของตารางแฮช
หากวัตถุเดียวกันมีแฮชโค้ดที่แตกต่างกันการดำเนินการบนตารางแฮชจะมีผลลัพธ์ที่ไม่คาดคิด เพื่อหลีกเลี่ยงปัญหานี้คุณเพียงแค่ต้องจำสิ่งหนึ่ง: คุณควรเขียนวิธี Equals และวิธี HashCode ในเวลาเดียวกันแทนที่จะเขียนหนึ่งในนั้น
Hashtable ถูกซิงโครไนซ์
คลาส hashmap
HashMap นั้นคล้ายคลึงกับ Hashtable ความแตกต่างคือ HashMap เป็นแบบอะซิงโครนัสและอนุญาตให้ NULL, ค่า NULL และ NULL คีย์ อย่างไรก็ตามเมื่อ HASHMAP ได้รับการยกย่องว่าเป็นคอลเลกชัน (ค่า () สามารถส่งคืนคอลเลกชัน) ค่าใช้จ่ายในการทำซ้ำของการวนซ้ำจะเป็นสัดส่วนกับความสามารถของ HASHMAP ดังนั้นหากประสิทธิภาพของการดำเนินการวนซ้ำมีความสำคัญมากอย่าตั้งค่าความสามารถในการเริ่มต้นของ HASHMAP ให้สูงเกินไปหรือปัจจัยโหลดต่ำเกินไป
สรุป