โดยทั่วไปแล้วแผนที่เป็นโครงสร้างข้อมูลที่ประกอบด้วยคู่คีย์-ค่าและแต่ละคีย์นั้นไม่ซ้ำกันในชุด มาใช้ K และ V เพื่อแสดงถึงคีย์และค่านิยมเพื่อแสดงให้เห็นถึงประเด็นสำคัญเก้าประการเกี่ยวกับ MAP ใน Java
0. แปลงแผนที่เป็นประเภทรายการ
ใน Java อินเทอร์เฟซแผนที่มีสามวิธีในการรับคอลเลกชัน: ชุดคีย์ชุดค่าและชุดคีย์-ค่า พวกเขาทั้งหมดสามารถแปลงเป็นประเภทรายการโดยคอนสตรัคเตอร์หรือวิธีการ addall () รหัสต่อไปนี้แสดงวิธีการสร้าง ArrayList จากแผนที่:
// คีย์ลิสต์ลิสต์ KeyList = new ArrayList (map.keyset ()); // value listlist valuelist = arrayList ใหม่ (map.valueset ()); // คีย์-value listlist entryList = new ArrayList (map.entryset ());
1. สำรวจแผนที่ผ่านรายการ
วิธีนี้ใน Java มีอยู่เป็นคู่คีย์-ค่าเรียกว่า map.entry map.entryset () ส่งคืนคอลเลกชันคีย์-ค่าซึ่งเป็นวิธีที่มีประสิทธิภาพมากในการสำรวจ
สำหรับ (รายการรายการ: map.entryset ()) {// รับ keyk key = entry.getKey (); // รับ valuev value = entry.getValue ();} ตัววนซ้ำยังใช้บ่อยโดยเฉพาะก่อน jdk1.5
ตัววนซ้ำ itr = map.entryset (). iterator (); ในขณะที่ (itr.hasnext ()) {รายการรายการ = itr.next (); // รับ keyk key = entry.getKey (); // รับ valuev value = entry.getValue ();} 2. เรียงลำดับแผนที่ตามคีย์
การเรียงลำดับต้องใช้การดำเนินการบ่อยครั้งบน KE ของแผนที่ วิธีหนึ่งคือการใช้งานผ่านตัวเปรียบเทียบ:
list = new ArrayList (map.entryset ()); collections.sort (รายการ, ตัวเปรียบเทียบใหม่ () {@Overridepublic int เปรียบเทียบ (รายการ e1, รายการ e2) {return e1.getKey (). compareto (e2.getKey ());}}); อีกวิธีหนึ่งคือการใช้ SortEdMap แต่ต้องใช้อินเทอร์เฟซที่เปรียบเทียบได้
SortedMap sortedMap = ใหม่ treemap (ใหม่ comparator () {@Overridepublic int Compare (K K1, K K2) {return K1.Compareto (K2);}}); SortedMap.putAll (MAP);3. เรียงลำดับแผนที่ด้วยค่า <br /> นี่ค่อนข้างคล้ายกับจุดก่อนหน้ารหัสมีดังนี้:
รายการรายการ = new ArrayList (map.entryset ()); collections.sort (รายการ, ตัวเปรียบเทียบใหม่ () {@OverridePublic Int Compare (รายการ E1, รายการ e2) {return e1.getValue (). compareto (e2.getValue ());}});4. เริ่มต้นแผนที่คงที่คง
เมื่อคุณต้องการสร้างแผนที่สแตติกระดับโลกเรามีสองวิธีและเป็นแบบเธรดที่ปลอดภัย
ใน test1 แม้ว่าเราจะประกาศว่าแผนที่นั้นคงที่ แต่เรายังสามารถเปลี่ยนค่าได้เมื่อเริ่มต้นเช่นเดียวกับ test1.map.put (3, "สาม");
ใน test2 เราตั้งค่าให้ไม่ได้รับการดัดแปลงผ่านชั้นเรียนภายในดังนั้นเมื่อเราเรียกใช้ test2.map.put (3, "สาม") มันจะโยน a
ข้อยกเว้น UnsupportedOperationException ห้ามมิให้คุณแก้ไข Public Class Test1 {แผนที่สุดท้ายแบบคงที่ส่วนตัว; Static {map = ใหม่ hashmap (); map.put (1, "one"); map.put (2, "สอง");}} คลาสสาธารณะ test2 {แผนที่สุดท้ายคงที่; collections.unmodifiablemap (amap);}} 5. ความแตกต่างระหว่าง HashMap, Treemap และ Hashtable
ในอินเทอร์เฟซแผนที่มีสามการใช้งาน: HashMap, TreeMap และ Hashtable
พวกเขาแตกต่างกัน สำหรับรายละเอียดโปรดดูบทความ "HashMap vs. Treemap vs. Hashtable vs. LinkedHashMap"
6. แบบสอบถามย้อนกลับในแผนที่
หลังจากเราเพิ่มคู่คีย์-ค่าเข้ากับแผนที่หมายความว่าในแผนที่คีย์และค่าจะสอดคล้องกับหนึ่งและคีย์สอดคล้องกับค่า แต่บางครั้งเราจำเป็นต้องย้อนกลับแบบสอบถามเช่นการค้นหาคีย์ของมันผ่านค่าที่กำหนด โครงสร้างข้อมูลนี้เรียกว่าแผนที่ bididirectional น่าเสียดายที่ JDK ไม่รองรับ
Apache และ Guava ร่วมกันจัดเตรียมการใช้แผนที่แบบสองทิศทางนี้ซึ่งกำหนดว่าทั้งคีย์และค่าจะต้องเป็น 1: 1 ความสัมพันธ์
7. การคัดลอกแผนที่
Java มีวิธีการมากมายที่สามารถตระหนักถึงการจำลองแบบของแผนที่ แต่วิธีการเหล่านั้นอาจไม่ถูกซิงโครไนซ์ได้ตลอดเวลา พูดง่ายๆคือการเปลี่ยนแปลงที่เกิดขึ้นในแผนที่และสิ่งที่คัดลอกยังคงเหมือนเดิม นี่คือวิธีการใช้งานที่ค่อนข้างมีประสิทธิภาพ:
แผนที่ CopiedMap = Collections.synchronizedMap (แผนที่);
แน่นอนว่ามีวิธีอื่นซึ่งเป็นการโคลนนิ่ง แต่ Josh Bloch ผู้ริเริ่ม Java ของเราไม่แนะนำวิธีนี้ ครั้งหนึ่งเขาเคยพูดในการให้สัมภาษณ์เกี่ยวกับการโคลนนิ่งแผนที่: วิธีการโคลนนิ่งมีให้ในหลายชั้นเรียนเพราะผู้คนต้องการพวกเขา อย่างไรก็ตามการโคลนนิ่งมี จำกัด มากและมักจะทำให้เกิดผลกระทบที่ไม่จำเป็น (ข้อความต้นฉบับ "คัดลอกตัวสร้างกับการโคลน"))
8. สร้างแผนที่เปล่า
หากแผนที่นี้ถูกตั้งค่าเป็นไม่สามารถใช้งานได้สามารถนำไปใช้ได้โดยต่อไปนี้
MAP = Collections.empymap ();
ในทางตรงกันข้ามเมื่อเราสามารถใช้มันได้เราสามารถทำได้
MAP = ใหม่ hashmap ();
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น