ในโพสต์นี้ เราจะเรียนรู้วิธีต่างๆ ในการวนซ้ำแผนที่ใน Java วิธีทั่วไปบางประการและวิธีการใช้ด้วยความช่วยเหลือจากตัวอย่าง ก่อนเริ่มต้น เราถือว่าคุณเข้าใจ
อินเทอร์เฟซและ
แผนที่ใน Java อย่างไรก็ตาม นี่คือบทสรุปสั้นๆ สำหรับคุณ
แผนที่ใน Java คืออะไร
มีการตีความหลายอย่าง แต่ขอพูดง่ายๆ แบบนี้
“Map เป็นส่วนต่อประสานในภาษา Java ที่ใช้เก็บข้อมูลในรูปแบบของคู่คีย์-ค่า”
หากคุณกำลังคิดว่าแผนที่ใช้สำหรับทำอะไร? หรือจำเป็นเมื่อใด จากนั้นมีสถานการณ์มากมายในชีวิตจริงเมื่อเราต้องจัดเก็บข้อมูลเป็นคู่คีย์-ค่า ตัวอย่างเช่น คำทั้งหมดที่ตรงกับตัวอักษรตัวเดียวในพจนานุกรมสามารถจัดเก็บในรูปแบบของแผนที่ในภาษาจาวา
เค |
ว่าว ราชา เกาหลี อัศวิน... ฯลฯ |
แอล |
ลาวา ชีวิต แสงสว่าง ความรัก เลบานอน... ฯลฯ |
นอกจากนี้ คุณสามารถดูตัวอย่างต่อไปนี้เพื่อทำความเข้าใจให้ดียิ่งขึ้น
สำคัญ |
ค่า |
รหัสครอบครัว |
สมาชิกในครอบครัว |
ชื่อชั้น |
รหัสนักศึกษา |
ชื่อพื้นที่ |
รหัสไปรษณีย์ |
บล็อกพื้นที่ |
บ้านเลขที่ |
ทำไมเราต้องทำซ้ำผ่านแผนที่?
เราจำเป็นต้องสำรวจหรือวนซ้ำแผนที่เพื่อเข้าถึง แก้ไข หรือลบข้อมูล ลองสำรวจตัวเลือกบางอย่างที่เรามี
วิธีทั่วไปในการทำซ้ำแผนที่ใน Java มีอะไรบ้าง
แม้ว่าจะมีหลายวิธีในการสำรวจแผนที่ อย่างไรก็ตาม เราจะมุ่งเน้นไปที่วิธีที่มีประสิทธิภาพและเรียบง่ายที่สุด
- วิธีการวนรอบ ForEach
- วิธีการวนซ้ำ
โปรดดูการดำเนินการทั้งสองวิธีด้านล่าง
โดยใช้วิธี Foreach Loop
ตัวอย่าง
import java.util.Map;
import java.util.HashMap;
public class ForEachDemo {
public static void main(String[] args) {
Map<String, String> businessDays = new HashMap<String, String>();
// store business days i-e; key/value pairs in the Map
businessDays.put("1", "Monday");
businessDays.put("2", "Tuesday");
businessDays.put("3", "Wednesday");
businessDays.put("4", "Thursday");
businessDays.put("5", "Friday");
// Iterating over the Map.entrySet() using map.forEach
for (Map.Entry<String, String> entry : businessDays.entrySet())
{
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
}
}
}
เอาต์พุต
คีย์ = 1, คีย์เวิร์ด = วันจันทร์ คีย์ = 2, คีย์เวิร์ด = วันอังคาร คีย์ = 3, คีย์เวิร์ด = วันพุธ คีย์ = 4, คีย์เวิร์ด = วันพฤหัสบดี คีย์ = 5, คีย์เวิร์ด = วันศุกร์
คำอธิบาย
ในตัวอย่างนี้ เราใช้ foreach วนซ้ำเพื่อวนซ้ำแผนที่ เมื่อใช้ for-each loop เราจะได้รับ
ชุดค่า ()ซึ่งให้ "มุมมอง" อัตโนมัติของข้อมูลในแผนที่ ในรูปแบบของคู่คีย์-ค่า แต่ละชุดรายการประกอบด้วยคีย์และค่าที่เกี่ยวข้อง ซึ่งคุณสามารถใช้เมธอดทั้งหมดของ
Map.Entry<key, value>ตามความต้องการของคุณ ที่นี่เราใช้เฉพาะ
getKey()และ
getValue()เพื่อแสดงข้อมูลบนคอนโซล ในแบบฝึกหัด คุณสามารถสำรวจวิธีการที่เหลือเพื่อเสริมสร้างคำสั่งของคุณในแนวคิดนี้
โดยใช้วิธี Iterators
ตัวอย่าง
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class MapIterator {
public static void main(String[] args) {
Map<String, String> monthsInAYear = new HashMap<String, String>();
// store business days i-e; key/value pairs in the Map
monthsInAYear.put("1", "January");
monthsInAYear.put("2", "February");
monthsInAYear.put("3", "March");
monthsInAYear.put("4", "April");
monthsInAYear.put("5", "May");
monthsInAYear.put("6", "June");
monthsInAYear.put("7", "July");
monthsInAYear.put("8", "August");
monthsInAYear.put("9", "September");
monthsInAYear.put("10", "October");
monthsInAYear.put("11", "November");
monthsInAYear.put("12", "December");
// iterate map / traverse the map using using iterator
Iterator<Map.Entry<String, String>> iterator = monthsInAYear.entrySet().iterator();
while (iterator.hasNext())
{
// check if next entry exists in the map
Map.Entry<String, String> entry = iterator.next();
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
}
}
}
เอาต์พุต
คีย์ = 11, คีย์ = คีย์พฤศจิกายน = 1, คีย์ = คีย์มกราคม = 12, คีย์ = คีย์ธันวาคม = 2, คีย์เวิร์ด = คีย์กุมภาพันธ์ = 3, คีย์เวิร์ด = คีย์มีนาคม = 4, คีย์เวิร์ด = คีย์เมษายน = 5, คีย์เวิร์ด = คีย์พฤษภาคม = 6, ค่า = ปุ่มเดือนมิถุนายน = 7, ค่า = ปุ่มเดือนกรกฎาคม = 8, ค่า = ปุ่มเดือนสิงหาคม = 9, ค่า = ปุ่มเดือนกันยายน = 10, ค่า = ตุลาคม
คำอธิบาย
ในตัวอย่างนี้ เราสร้าง explicit iterator เพื่อสำรวจ / วนซ้ำบนแผนที่ ขั้นแรก คุณต้องนำเข้าคลาสตัววนซ้ำ จากนั้นรับตัววนซ้ำสำหรับชุดรายการ ตอนนี้สำรวจแผนที่ในขณะที่ตรวจสอบเอนทิตีถัดไปที่มีอยู่บนแผนที่ ไปแล้ว! การข้ามผ่านของคุณเสร็จสิ้น เพียงเท่านี้
Foreach loop ดีกว่าวิธี iterators หรือไม่?
ไม่สำคัญว่าคุณจะใช้วิธีใดในการสำรวจแผนที่ ตราบใดที่มันทำงานให้คุณ ในแง่ของประสิทธิภาพ ทั้ง for- each
loop และ iterators มีความซับซ้อนของเวลาเท่ากัน ดังนั้นจึงไม่มีใครดีไปกว่าอย่างอื่น ขึ้นอยู่กับว่าคุณต้องใช้อะไรและเมื่อไหร่
ความแตกต่างระหว่างสองวิธีคืออะไร?
for-each ไม่อนุญาตให้อัปเดต/แก้ไขข้อมูลในแผนที่ ในทางตรงกันข้าม คุณสามารถแก้ไขข้อมูลได้อย่างง่ายดายโดยใช้ตัววนซ้ำ คลาส iterators อำนวยความสะดวกให้คุณโดยการปรับใช้เพื่อแก้ไข/ลบข้อมูลในแผนที่ ในทางกลับกัน หากคุณพยายามแก้ไข/ลบข้อมูลแผนที่โดยใช้ for-each วนซ้ำ จะทำให้เกิด
ConcurrentModificationException เหตุผลนี้คือ for-each วนซ้ำสร้างตัววนซ้ำโดยปริยายซึ่งไม่เปิดเผยต่อผู้ใช้ ดังนั้น คุณไม่มีสิทธิ์แก้ไขหรือลบข้อมูลใดๆ
ใช้วิธีผ่านช่องทางใดและเมื่อใด
หากคุณไม่แน่ใจว่าจะใช้ for-each หรือ iterators เพื่อวนซ้ำแผนที่ของคุณ คุณสามารถทำตามคำแนะนำต่อไปนี้
- ใช้iteratorถ้าคุณต้องแก้ไขแผนที่
- ใช้for-eachลูปหากคุณมีลูปที่ซ้อนกัน (เพื่อหลีกเลี่ยงความซับซ้อน)
บทสรุป
ในตอนท้ายของโพสต์ เราหวังว่าคุณจะได้เรียนรู้วิธีการวนซ้ำแผนที่ใน Java ขอแนะนำให้คุณฝึกฝนสิ่งเหล่านี้และลองใช้วิธีการผ่านเส้นทางอื่นๆ ด้วย อย่าลังเลที่จะย้อนกลับหรือโพสต์คำถามเมื่อใดก็ตามที่คุณรู้สึกติดขัด ถึงตอนนั้น ขอให้มีความสุขกับการเรียนรู้!
GO TO FULL VERSION