แนะนำแผนที่
แมปกุญแจกับวัตถุของค่า แผนที่ไม่สามารถมีคีย์ที่ซ้ำกันได้ แต่ละคีย์สามารถแมปกับค่าเดียวได้อย่างมากเท่านั้น อินเทอร์เฟซนี้แทนที่คลาสพจนานุกรมซึ่งเป็นคลาสนามธรรมทั้งหมดไม่ใช่อินเทอร์เฟซ
อินเทอร์เฟซแผนที่มีมุมมองการรวบรวมสามมุมมองที่อนุญาตให้ดูเนื้อหาของแผนที่ในรูปแบบของชุดคีย์ชุดค่าหรือชุดความสัมพันธ์การแมปคีย์-ค่า คำสั่งการทำแผนที่หมายถึงลำดับที่ตัววนซ้ำส่งคืนองค์ประกอบของมันในมุมมองคอลเลกชันของแผนที่ การใช้งานการทำแผนที่บางอย่างรับประกันคำสั่งซื้อของพวกเขาอย่างชัดเจนเช่นคลาส treemap; คนอื่นไม่รับประกันคำสั่งซื้อของพวกเขาเช่นคลาส HASHMAP
หมายเหตุ: ต้องใช้ความระมัดระวังเป็นพิเศษเมื่อใช้วัตถุที่ไม่แน่นอนเป็นปุ่มการแมป เมื่อวัตถุเป็นคีย์ในแผนที่หากค่าของวัตถุมีการเปลี่ยนแปลงในลักษณะที่มีผลต่อการเปรียบเทียบเท่ากับพฤติกรรมของแผนที่จะไม่แน่นอน กรณีพิเศษที่ห้ามนี้คือแผนที่ไม่อนุญาตให้รวมตัวเองเป็นคีย์ แม้ว่าแผนที่จะได้รับอนุญาตให้รวมตัวเองเป็นค่าระวัง: คำจำกัดความของวิธีการเท่ากับและวิธีการแฮชโฟตอนจะไม่ชัดเจนในแผนที่ดังกล่าวอีกต่อไป
อินเทอร์เฟซแผนที่:
แผนที่ให้การแมปจากคีย์สู่ค่า แผนที่ไม่สามารถมีคีย์เดียวกันได้และแต่ละคีย์สามารถแมปได้เพียงค่าเดียวเท่านั้น อินเทอร์เฟซแผนที่ให้มุมมองสามประเภทของคอลเลกชัน เนื้อหาของแผนที่ถือได้ว่าเป็นชุดของคอลเลกชันคีย์ชุดของคอลเลกชันค่าหรือชุดของการแมปคีย์-ค่า
คลาสแฮช
Hashtable สืบทอดอินเทอร์เฟซแผนที่และใช้ตารางแฮชด้วยการทำแผนที่ค่าคีย์ วัตถุที่ไม่ใช่ NULL ใด ๆ สามารถใช้เป็นคีย์หรือค่า
ใช้ใส่ (คีย์, ค่า) เพื่อเพิ่มข้อมูลใช้ GET (คีย์) เพื่อดึงข้อมูล ค่าใช้จ่ายเหนือศีรษะของการดำเนินการพื้นฐานทั้งสองนี้คงที่ Hashtable ปรับประสิทธิภาพผ่านพารามิเตอร์ความจุเริ่มต้นและพารามิเตอร์ปัจจัยโหลด โดยปกติแล้วปัจจัยโหลดเริ่มต้น 0.75 สามารถบรรลุความสมดุลเวลาและพื้นที่ได้ดีขึ้น การเพิ่มปัจจัยโหลดสามารถประหยัดพื้นที่ได้ แต่เวลาการค้นหาที่สอดคล้องกันจะเพิ่มขึ้นซึ่งจะส่งผลกระทบต่อการดำเนินงานเช่น Get and Put
ตัวอย่างง่ายๆของการใช้แฮชช์มีดังนี้: ใส่ 1, 2 และ 3 ลงในแฮชแต้มและกุญแจของพวกเขาคือ "หนึ่ง", "สอง", "สาม" ตามลำดับ:
หมายเลข Hashtable = new hashtable (); number.put ("หนึ่ง", จำนวนเต็มใหม่ (1)); number.put ("สอง", จำนวนเต็มใหม่ (2)); number.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 ให้สูงเกินไปหรือปัจจัยโหลดต่ำเกินไป
ระดับความอ่อนแอ
WeakHashMap เป็น HASHMAP ที่ได้รับการปรับปรุงซึ่งใช้ "การอ้างอิงที่อ่อนแอ" กับคีย์ หากคีย์ไม่ได้อ้างอิงจากภายนอกอีกต่อไปคีย์สามารถรีไซเคิลได้โดย GC
ข้างต้นเป็นการแนะนำอินเทอร์เฟซแผนที่ Java นักเรียนที่กำลังเรียนรู้การเขียนโปรแกรม Java สามารถอ้างถึงได้