Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

โปรแกรม Java วนลูปผ่านองค์ประกอบของ HashMap

การวนลูป (Iterate) ผ่าน HashMap ใน Java

HashMap เก็บข้อมูลเป็นคู่ Key-Value การวนลูปสามารถทำได้หลายวิธี ขึ้นอยู่กับว่าต้องการ Key, Value หรือทั้งคู่

วิธีการวนลูปหลัก

1. ใช้ entrySet() - แนะนำสำหรับ Key + Value

Map map = new HashMap<>();
map.put("1", "Java");
map.put("2", "Python");

for (Map.Entry entry : map.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

2. ใช้ keySet() - เมื่อต้องการแค่ Key

for (String key : map.keySet()) {
    System.out.println("Key: " + key + ", Value: " + map.get(key));
}

3. ใช้ values() - เมื่อต้องการแค่ Value

for (String value : map.values()) {
    System.out.println(value);
}

4. ใช้ forEach (Java 8+) - Lambda Style

map.forEach((key, value) -> System.out.println(key + " : " + value));

5. ใช้ Iterator (สำหรับลบขณะวนลูป)

Iterator> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
    Map.Entry entry = iterator.next();
    if (entry.getValue().equals("Python")) {
        iterator.remove(); // ลบได้อย่างปลอดภัย
    }
}

ตัวอย่างโค้ดสมบูรณ์

import java.util.HashMap;
import java.util.Map;

public class Demo {
    public static void main(String[] args) {
        Map inputMap = new HashMap<>();
        inputMap.put("1", "Java");
        inputMap.put("2", "Python");
        inputMap.put("3", "Scala");
        inputMap.put("4", "Javascript");
        
        System.out.println("องค์ประกอบของ HashMap:");
        
        // วิธีที่ 1: entrySet (แนะนำ)
        for (Map.Entry entry : inputMap.entrySet()) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
        
        System.out.println("\n--- ใช้ forEach (Java 8+) ---");
        inputMap.forEach((k, v) -> System.out.println(k + " : " + v));
    }
}

ผลลัพธ์

องค์ประกอบของ HashMap:
1 : Java
2 : Python
3 : Scala
4 : Javascript

--- ใช้ forEach (Java 8+) ---
1 : Java
2 : Python
3 : Scala
4 : Javascript

ประสิทธิภาพและคำแนะนำ

วิธี ประสิทธิภาพ เหมาะสำหรับ
entrySet() ดีที่สุด ต้องการทั้ง Key และ Value
keySet() + get() ช้ากว่า (lookup ซ้ำ) ต้องการแค่ Key
values() ดี ต้องการแค่ Value
forEach() ดี Code สั้น กระชับ (Java 8+)

ข้อควรระวัง

  • HashMap ไม่รับประกันลำดับ ใช้ LinkedHashMap หากต้องการรักษาลำดับการแทรก
  • การแก้ไข Map ขณะวนลูป (put/remove) จะโยน ConcurrentModificationException → ใช้ Iterator หรือเก็บ key ที่จะลบไว้ก่อน
  • Key ที่เป็น null ได้เพียงคีย์เดียว (Value เป็น null ได้หลายค่า)