การวิจัยหลักในบทความนี้คือเนื้อหาที่เกี่ยวข้องของ ENUMMAP แทนดัชนีลำดับใน Java ซึ่งมีการแนะนำดังนี้
บันทึกการศึกษา "Java Chinese Edition 2 ที่มีประสิทธิภาพ"
มันมักจะพบโดยใช้วิธีลำดับของ Enum ในการจัดทำดัชนีประเภท enum
สมุนไพรระดับสาธารณะ {public enum type {ประจำปี, ยืนต้น, biennial}; ชื่อสตริงสุดท้ายส่วนตัว; ประเภทสุดท้ายประเภทสุดท้าย; Herb (ชื่อสตริงประเภทประเภท) {this.name = name; this.type = type; } @Override สตริงสาธารณะ toString () {ชื่อคืน; -ตอนนี้สมมติว่ามีสมุนไพรหลายชนิดที่เป็นตัวแทนของพืชในสวนที่คุณต้องการจัดระเบียบตามประเภท (ประจำปียืนต้นหรือสองปี) ก่อนที่จะแสดงรายการพืชเหล่านี้ หากคุณต้องการทำสิ่งนี้คุณต้องสร้างสามชุดหนึ่งชุดสำหรับแต่ละประเภทและวนซ้ำผ่านสวนทั้งหมดและวางสมุนไพรแต่ละตัวลงในชุดที่เกี่ยวข้อง โปรแกรมเมอร์บางคนทำสิ่งนี้โดยใส่ชุดเหล่านี้ลงในอาร์เรย์ที่จัดทำดัชนีตามจำนวนลำดับตามลำดับ
// การใช้ ordinal () เพื่อจัดทำดัชนีอาร์เรย์ - อย่าทำ Thisherb [] garden = ... ; // จัดทำดัชนีโดย herb.type.ordinal () set <herb> [] herbsbyType = (ตั้งค่า <herb> []) ชุดใหม่ [herb.type.values () ความยาว]; สำหรับ (int i = 0; i <herbsbytype.length; i ++) {HerbsbyType [i] = new hashset <herb> ();} สำหรับ (สมุนไพร h: สวน) {Herbsbytype [h.type.ordinal ()] เพิ่ม (h);} // พิมพ์ผลลัพธ์ System.out.printf ("%s:%s%n", herb.type.values () [i], herbsbytype [i]);};วิธีนี้เป็นไปได้จริง ๆ แต่มันซ่อนปัญหามากมาย เพราะอาร์เรย์ไม่เข้ากันได้กับยาชื่อสามัญ โปรแกรมจำเป็นต้องทำการแปลงที่ไม่ได้ตรวจสอบและไม่สามารถรวบรวมได้อย่างถูกต้อง เนื่องจากอาร์เรย์ไม่ทราบว่าดัชนีแสดงถึงอะไรคุณต้องติดฉลากเอาต์พุตของดัชนีเหล่านี้ด้วยตนเอง แต่ปัญหาที่ร้ายแรงที่สุดของวิธีนี้คือเมื่อคุณเข้าถึงอาร์เรย์ที่จัดทำดัชนีตามหมายเลขลำดับ enum มันเป็นความรับผิดชอบของคุณในการใช้ค่า int ที่ถูกต้อง int ไม่สามารถให้ความปลอดภัยประเภทสำหรับ enums หากคุณใช้ค่าที่ไม่ถูกต้องโปรแกรมจะทำงานผิดพลาดอย่างเงียบ ๆ หรือหากคุณโชคดีมันจะส่งข้อยกเว้น ArrayIndExOutOfBoundException
java.util.enummap เป็นการใช้แผนที่ที่รวดเร็วมากซึ่งใช้สำหรับการแจงนับเป็นพิเศษ
// ใช้ enummap เพื่อเชื่อมโยงข้อมูลกับ enummap <herb.type ตั้งค่า <herb >> herbsbyType = new enummap <herb.type ตั้งค่า <Herb >> (Herb.type.class); สำหรับ (herb.type t: herb.type.values) Herbsbytype.put (t, hashset ใหม่ <Herb> ()); สำหรับ (Herb H: Garden) Herbsbytype.get (H.Type) .Add (H); System.out.println (Herbsbytype);
โปรแกรมนี้สั้นกว่าชัดเจนขึ้นและปลอดภัยกว่าและสามารถทำงานได้ด้วยความเร็วเทียบเท่ากับโปรแกรมที่ใช้หมายเลขลำดับ มันไม่มีการแปลงที่ไม่ปลอดภัย ไม่จำเป็นต้องติดฉลากเอาต์พุตของดัชนีเหล่านี้ด้วยตนเองเนื่องจากปุ่มการทำแผนที่รู้วิธีการแปลตัวเองเป็นการแจกแจงสตริงที่พิมพ์ได้ นอกจากนี้ยังเป็นไปไม่ได้ที่จะทำผิดพลาดเมื่อคำนวณดัชนี อาร์เรย์ เหตุผลที่ enummap เปรียบได้กับอาร์เรย์ที่จัดทำดัชนีผ่านดัชนีลำดับในแง่ของความเร็วในการทำงานคือ Enummap ใช้อาร์เรย์นี้ภายใน แต่มันซ่อนรายละเอียดความคิดประเภทนี้จากโปรแกรมเมอร์โดยรวมฟังก์ชั่นที่หลากหลายของแผนที่และประเภทความปลอดภัยด้วยความเร็วของอาร์เรย์ โปรดทราบว่าตัวสร้าง Enummap ใช้วัตถุคลาสประเภทคีย์: นี่เป็นโทเค็นประเภท จำกัด ที่ให้ข้อมูลทั่วไปรันไทม์
สรุป
ข้างต้นเป็นคำอธิบายโดยละเอียดทั้งหมดของ enummap แทนรหัสดัชนีลำดับใน Java ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!