สำหรับสี่วิธีในการสำรวจแผนที่ในภาษา Java โปรดดูคำอธิบายโดยละเอียดด้านล่าง
วิธีที่ 1 นี่เป็นวิธีที่พบได้บ่อยที่สุดและโดยส่วนใหญ่แล้วจะเป็นวิธีที่พึงประสงค์มากที่สุดในการสำรวจ ใช้เมื่อต้องการทั้งคีย์และค่า
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); สำหรับ (Map.Entry<Integer, Integer> รายการ : map.entrySet()) { System.out.println("Key = " + entry. getKey() + ", ค่า = " + entry.getValue() }
วิธีที่ 2 สำรวจคีย์หรือค่าในแต่ละลูป
หากคุณต้องการเพียงคีย์หรือค่าในแผนที่ คุณสามารถสำรวจผ่านชุดคีย์หรือค่าต่างๆ แทนการใช้ entrySet
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); // สำรวจคีย์ในแผนที่สำหรับ (คีย์จำนวนเต็ม: map.keySet()) { System.out.println("Key = " + key ) ; } //สำรวจค่าในแผนที่สำหรับ (ค่าจำนวนเต็ม : map.values()) { System.out.println("Value = " + value }
วิธีนี้มีประสิทธิภาพดีกว่า entrySet traversal เล็กน้อย (เร็วกว่า 10%) และโค้ดก็สะอาดกว่า
วิธีที่สามใช้ Iterator เพื่อสำรวจ
ใช้ยาสามัญ :
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Iterator<Map.Entry<Integer, Integer>> รายการ = map.entrySet().iterator(); ในขณะที่ (entries.hasNext()) { Map.Entry รายการ <จำนวนเต็ม, จำนวนเต็ม> = entry.next(); System.out.println("Key = " + entry.getKey() + ", ค่า = " + entry.getValue() }
โดยไม่ต้องใช้ยาชื่อสามัญ:
แผนที่แผนที่ = ใหม่ HashMap(); รายการตัววนซ้ำ = map.entrySet().iterator(); ในขณะที่ (entries.hasNext()) { Map.Entry entry = (Map.Entry) entry.next(); จำนวนเต็ม)entry.getKey(); ค่าจำนวนเต็ม = (จำนวนเต็ม)entry.getValue(); System.out.println("Key = " + key + ", Value = " + ค่า); }
คุณยังสามารถใช้วิธีการเดียวกันกับชุดคีย์และค่าต่างๆ ได้
วิธีนี้ดูเหมือนซ้ำซ้อน แต่มีข้อดี ก่อนอื่น นี่เป็นวิธีเดียวที่จะสำรวจแผนที่ใน Java เวอร์ชันเก่า ข้อดีอีกประการหนึ่งคือคุณสามารถเรียก iterator.remove() เพื่อลบรายการขณะสำรวจเส้นทาง ซึ่งอีกสองวิธีไม่สามารถทำได้ ตามข้อมูลของ javadoc หากคุณพยายามใช้วิธีนี้ในการแวะผ่านแต่ละครั้ง ผลลัพธ์จะไม่สามารถคาดเดาได้
จากมุมมองของประสิทธิภาพ วิธีนี้คล้ายกับประสิทธิภาพของการเคลื่อนที่ในแต่ละครั้ง (เช่น วิธีที่ 2)
วิธีที่ 4: สำรวจโดยค้นหาค่าด้วยคีย์ (ประสิทธิภาพต่ำ)
แผนที่ <จำนวนเต็ม, จำนวนเต็ม> แผนที่ = ใหม่ HashMap<จำนวนเต็ม, จำนวนเต็ม>(); สำหรับ (คีย์จำนวนเต็ม: map.keySet()) { ค่าจำนวนเต็ม = map.get(key); System.out.println("Key = " + คีย์ + ", ค่า = " + ค่า);
อีกทางเลือกหนึ่งสำหรับวิธีที่หนึ่ง โค้ดนี้ดูสะอาดตากว่า แต่จริงๆ แล้วค่อนข้างช้าและไม่มีประสิทธิภาพ เนื่องจากการได้รับค่าจากคีย์นั้นเป็นการดำเนินการที่ใช้เวลานาน (เมื่อเทียบกับวิธีที่ 1 วิธีการนี้จะช้ากว่า 20% ถึง 200% ในการใช้งานแผนที่ต่างๆ) หากคุณติดตั้ง FindBugs ไว้ ระบบจะตรวจสอบและเตือนคุณเกี่ยวกับการข้ามผ่านที่ไม่มีประสิทธิภาพ ดังนั้นพยายามหลีกเลี่ยงการใช้มัน
สรุป
หากคุณต้องการเพียงคีย์หรือค่า ให้ใช้วิธีที่สอง หากเวอร์ชันภาษาที่คุณใช้อยู่ต่ำกว่า Java 5 หรือคุณวางแผนที่จะลบรายการระหว่างการข้ามผ่าน คุณต้องใช้วิธีที่สาม มิฉะนั้น ให้ใช้วิธีที่หนึ่ง (ทั้งคีย์และค่า)