ประเภทของแผนที่
ใน Java ฟังก์ชั่นหลักของแผนที่คือการจัดเก็บคู่คีย์-ค่า เนื่องจากค่าได้มาจากคีย์จึงไม่อนุญาตให้ทำซ้ำคีย์ ส่วนใหญ่มีหมวดหมู่ต่อไปนี้:
hashmap:
แผนที่ที่ใช้กันมากที่สุดเก็บข้อมูลตามค่า HashCode ของคีย์และสามารถรับค่าได้โดยตรงตามคีย์ด้วยความเร็วในการเข้าถึงที่รวดเร็วมาก เมื่อข้ามไปตามลำดับของการเก็บข้อมูลจะสุ่มอย่างสมบูรณ์ HashMap อนุญาตให้มีเพียงหนึ่งระเบียนที่เป็นโมฆะ ค่าของหลายระเบียนที่จะเป็นโมฆะ; HASHMAP ไม่รองรับการซิงโครไนซ์เธรดนั่นคือหลายเธรดสามารถเขียน HASHMAP ได้ตลอดเวลา มันอาจนำไปสู่ความไม่สอดคล้องกันในข้อมูล หากจำเป็นต้องมีการซิงโครไนซ์คุณสามารถใช้วิธีการซิงโครไนซ์ MAP ของคอลเลกชันเพื่อให้ซิงโครไนซ์ HASHMAP หรือใช้พร้อมกัน Hashtable คล้ายกับ HashMap มันสืบทอดมาจากคลาสพจนานุกรม ความแตกต่างคือมันไม่อนุญาตให้คีย์หรือค่าที่บันทึกไว้ว่างเปล่า รองรับการซิงโครไนซ์เธรดนั่นคือมีเพียงเธรดเดียวเท่านั้นที่สามารถเขียนแฮชต์ได้ตลอดเวลาดังนั้นจึงทำให้แฮชช์ได้ช้าลงเมื่อเขียน
LinkedHashMap
บันทึกการแทรกของบันทึกจะถูกบันทึกไว้ เมื่อข้าม LinkedHashMap กับตัววนซ้ำบันทึกที่ได้รับก่อนจะต้องแทรกก่อน คุณยังสามารถใช้พารามิเตอร์ในระหว่างการก่อสร้างและเรียงลำดับตามจำนวนแอปพลิเคชัน มันจะช้ากว่า Hashmap เมื่อข้ามไป แต่มีข้อยกเว้น เมื่อ HASHMAP มีกำลังการผลิตขนาดใหญ่และเป็นข้อมูลจริงน้อยกว่ามันอาจช้ากว่า LinkedHashMap เนื่องจากความเร็วในการเดินทางของ LinkedHashMap นั้นเกี่ยวข้องกับข้อมูลจริงเท่านั้นและไม่มีส่วนเกี่ยวข้องกับความจุในขณะที่ความเร็วในการเดินทางของ HashMap นั้นเกี่ยวข้องกับความจุ
treemap
การใช้อินเทอร์เฟซ SortMap บันทึกที่บันทึกสามารถจัดเรียงได้ตามคีย์ โดยค่าเริ่มต้นมันจะถูกเรียงลำดับตามลำดับจากน้อยไปมากของค่าคีย์หรือยังสามารถระบุตัวเปรียบเทียบการเรียงลำดับ เมื่อมันถูกสำรวจด้วยตัววนซ้ำบันทึกที่ได้รับจะถูกจัดเรียง
การเรียงลำดับคีย์
จากการแนะนำข้างต้นถึงประเภทของแผนที่เราจะเห็นว่า Treemap มีฟังก์ชั่นการเรียงลำดับคีย์ของตัวเอง ต้องใช้อินเทอร์เฟซเปรียบเทียบในเวลาเดียวกันเมื่อสร้าง ตัวอย่างมีดังนี้:
โมฆะคงที่ส่วนตัว sort_by_key () {map <จำนวนเต็ม, จำนวนเต็ม> treemap = ใหม่ treemap <> (ตัวเปรียบเทียบใหม่ <teeger> () {@Override int public Compare (จำนวนเต็ม o1, จำนวนเต็ม O2) {ส่งคืน O2-O1; // กรอกข้อมูลสำหรับ (int i = 0; i <100; i ++) {int key = (int) (10,000*math.random ()); ค่า int = (int) (10,000*math.random ()); treemap.put (คีย์, ค่า); } outmap (treemap); } โมฆะคงที่สาธารณะคงที่ (แผนที่ <จำนวนเต็ม, จำนวนเต็ม> แผนที่) {สำหรับ (จำนวนเต็มจำนวนเต็ม: map.keyset ()) {system.out.println ("key ="+integer+"value ="+map.get (จำนวนเต็ม)); }}/* ผลลัพธ์มีดังนี้: key = 9977 value = 80Key = 9684 value = 7108KEY = 9422 value = 1706Key = 9264 value = 1210KEY = 9248 value = 4758KEY = 9024 value = 7048KEY = 8892 ค่า = 3124 value = 8171Key = 8728 value = 1538Key = 8513 value = 4956KEY = 8462 value = 5617Key = 8355 value = 8912*///ดังที่เห็นได้จากด้านบนมันไม่ยากที่จะจัดเรียงตามกุญแจ แต่มันเป็นปัญหามากขึ้นในการจัดเรียงดังนั้นคุณต้องหมุนแผนที่
เรียงตามค่า
เนื่องจากแผนที่ไม่มีฟังก์ชั่นนี้ใน Java เราจึงต้องใช้มันเอง แนวคิดมีดังนี้:
รายการใน Java สามารถใช้อินเทอร์เฟซเปรียบเทียบได้
แผนที่เป็นรายการ <> คอลเลกชัน ดังนั้นการใช้รายการ <รายการ <>> สามารถใช้การเรียงลำดับและแทรกองค์ประกอบที่เรียงลำดับลงใน LinkedMap
การใช้งานรหัสมีดังนี้:
แผนที่คงที่ส่วนตัว <จำนวนเต็ม, จำนวนเต็ม> sortmap (แผนที่ <จำนวนเต็ม, จำนวนเต็ม> linkedMap) {list <map.entry <จำนวนเต็ม, จำนวนเต็ม >> แคช = new ArrayList <> (linkedMap.entrySet ()); // การเขียนฟังก์ชั่นการเปรียบเทียบการรวบรวม (แคช, ตัวเปรียบเทียบใหม่ <map.entry <จำนวนเต็ม, จำนวนเต็ม >> () {@Override สาธารณะ int เปรียบเทียบ (รายการ <จำนวนเต็ม, จำนวนเต็ม> o1, รายการ <จำนวนเต็ม, จำนวนเต็ม> o2) - แผนที่ <จำนวนเต็ม, จำนวนเต็ม> resultMap = ใหม่ linkedHashMap <> (); // แทรกผลลัพธ์ลงใน LinkedMap และส่งคืน (int i = 0; i <cache.size (); i ++) {resultmap.put (cache.get (i) .getKey (), cache.get (i) .getValue ()); } return resultmap; }/*ผลลัพธ์: 7965 99661067 99631720 98333257 97383934 9578777 93481924 93153472 92703649 91145892 9078*/////////////////Sด้วยวิธีนี้ทั้งการเรียงลำดับตามค่าและการเรียงลำดับตามคีย์สามารถทำได้