Skip to Content

HashMap

วันนี้เรามาเรียนรู้เกี่ยวกับ HashMap ใน Java กัน HashMap เป็นโครงสร้างข้อมูลที่มีประโยชน์มากสำหรับการเก็บข้อมูลแบบคู่ (key-value pairs)

HashMap คืออะไร?

HashMap เป็นโครงสร้างข้อมูลที่เก็บข้อมูลในรูปแบบของคู่ “คีย์” (key) และ “ค่า” (value) โดยที่คีย์จะต้องไม่ซ้ำกัน

ลองนึกภาพตู้ล็อกเกอร์ที่โรงเรียน แต่ละล็อกเกอร์มีหมายเลข (คีย์) และมีของของนักเรียน (ค่า) อยู่ข้างใน นั่นแหละคือ HashMap ในชีวิตจริง! 🔑📦

การสร้าง HashMap

ก่อนใช้ HashMap เราต้อง import มันก่อน:

import java.util.HashMap; public class ตัวอย่างHashMap { public static void main(String[] args) { // สร้าง HashMap ที่มีคีย์เป็น String และค่าเป็น Integer HashMap<String, Integer> คะแนนนักเรียน = new HashMap<>(); // สร้าง HashMap ที่มีคีย์เป็น Integer และค่าเป็น String HashMap<Integer, String> รหัสนักเรียน = new HashMap<>(); } }

การเพิ่มข้อมูลใน HashMap

เราใช้เมธอด put() เพื่อเพิ่มข้อมูลใน HashMap:

HashMap<String, Integer> คะแนนนักเรียน = new HashMap<>(); คะแนนนักเรียน.put("อ้อม", 85); คะแนนนักเรียน.put("แอม", 92); คะแนนนักเรียน.put("เอ", 78); System.out.println(คะแนนนักเรียน); // แสดง: {อ้อม=85, แอม=92, เอ=78}

การเข้าถึงข้อมูลใน HashMap

เราใช้เมธอด get() เพื่อเข้าถึงข้อมูลโดยใช้คีย์:

HashMap<String, Integer> คะแนนนักเรียน = new HashMap<>(); คะแนนนักเรียน.put("อ้อม", 85); คะแนนนักเรียน.put("แอม", 92); คะแนนนักเรียน.put("เอ", 78); System.out.println("คะแนนของแอม: " + คะแนนนักเรียน.get("แอม")); // แสดง: 92

การตรวจสอบว่ามีคีย์หรือค่าอยู่ใน HashMap

เราใช้ containsKey() และ containsValue() เพื่อตรวจสอบ:

HashMap<String, Integer> คะแนนนักเรียน = new HashMap<>(); คะแนนนักเรียน.put("อ้อม", 85); System.out.println("มีคะแนนของอ้อมไหม? " + คะแนนนักเรียน.containsKey("อ้อม")); // true System.out.println("มีใครได้คะแนน 100 ไหม? " + คะแนนนักเรียน.containsValue(100)); // false

การลบข้อมูลจาก HashMap

เราใช้เมธอด remove() เพื่อลบข้อมูล:

HashMap<String, Integer> คะแนนนักเรียน = new HashMap<>(); คะแนนนักเรียน.put("อ้อม", 85); คะแนนนักเรียน.put("แอม", 92); คะแนนนักเรียน.remove("อ้อม"); System.out.println(คะแนนนักเรียน); // แสดง: {แอม=92}

การวนลูปผ่าน HashMap

เราสามารถวนลูปผ่านคีย์หรือค่าของ HashMap ได้:

HashMap<String, Integer> คะแนนนักเรียน = new HashMap<>(); คะแนนนักเรียน.put("อ้อม", 85); คะแนนนักเรียน.put("แอม", 92); คะแนนนักเรียน.put("เอ", 78); // วนลูปผ่านคีย์ for (String ชื่อ : คะแนนนักเรียน.keySet()) { System.out.println("ชื่อนักเรียน: " + ชื่อ); } // วนลูปผ่านค่า for (Integer คะแนน : คะแนนนักเรียน.values()) { System.out.println("คะแนน: " + คะแนน); } // วนลูปผ่านทั้งคีย์และค่า for (HashMap.Entry<String, Integer> entry : คะแนนนักเรียน.entrySet()) { System.out.println(entry.getKey() + " ได้คะแนน " + entry.getValue()); }

ข้อดีของ HashMap

  1. การค้นหาข้อมูลเร็วมาก (เวลาเฉลี่ย O(1))
  2. เหมาะสำหรับการเก็บข้อมูลที่ต้องการค้นหาด้วยคีย์บ่อยๆ
  3. สามารถเก็บข้อมูลได้หลากหลายรูปแบบ (ขึ้นอยู่กับประเภทของคีย์และค่า)
  4. ไม่อนุญาตให้มีคีย์ซ้ำ ทำให้ข้อมูลไม่ซ้ำซ้อน

ตัวอย่างการใช้งานจริง

มาลองทำโปรแกรมพจนานุกรมง่ายๆ กัน:

import java.util.HashMap; import java.util.Scanner; public class พจนานุกรม { public static void main(String[] args) { HashMap<String, String> dictionary = new HashMap<>(); Scanner scanner = new Scanner(System.in); // เพิ่มคำศัพท์เริ่มต้น dictionary.put("hello", "สวัสดี"); dictionary.put("goodbye", "ลาก่อน"); dictionary.put("cat", "แมว"); dictionary.put("dog", "สุนัข"); while (true) { System.out.println("\n1. ค้นหาคำศัพท์"); System.out.println("2. เพิ่มคำศัพท์"); System.out.println("3. ลบคำศัพท์"); System.out.println("4. แสดงคำศัพท์ทั้งหมด"); System.out.println("5. ออกจากโปรแกรม"); System.out.print("เลือกตัวเลือก (1-5): "); int choice = scanner.nextInt(); scanner.nextLine(); // ล้างบรรทัดว่าง switch (choice) { case 1: System.out.print("ใส่คำศัพท์ภาษาอังกฤษที่ต้องการแปล: "); String word = scanner.nextLine(); if (dictionary.containsKey(word)) { System.out.println("คำแปล: " + dictionary.get(word)); } else { System.out.println("ไม่พบคำศัพท์นี้ในพจนานุกรม"); } break; case 2: System.out.print("ใส่คำศัพท์ภาษาอังกฤษ: "); String newWord = scanner.nextLine(); System.out.print("ใส่คำแปลภาษาไทย: "); String meaning = scanner.nextLine(); dictionary.put(newWord, meaning); System.out.println("เพิ่มคำศัพท์เรียบร้อย!"); break; case 3: System.out.print("ใส่คำศัพท์ภาษาอังกฤษที่ต้องการลบ: "); String wordToRemove = scanner.nextLine(); if (dictionary.remove(wordToRemove) != null) { System.out.println("ลบคำศัพท์เรียบร้อย!"); } else { System.out.println("ไม่พบคำศัพท์นี้ในพจนานุกรม"); } break; case 4: System.out.println("\nคำศัพท์ทั้งหมดในพจนานุกรม:"); for (HashMap.Entry<String, String> entry : dictionary.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); } break; case 5: System.out.println("ขอบคุณที่ใช้พจนานุกรมของเรา!"); scanner.close(); return; default: System.out.println("ตัวเลือกไม่ถูกต้อง กรุณาลองใหม่"); } } } }

สรุป

HashMap เป็นโครงสร้างข้อมูลที่มีประโยชน์มากใน Java สำหรับการเก็บและค้นหาข้อมูลแบบคู่ (key-value pairs) อย่างรวดเร็ว เหมาะสำหรับการใช้งานที่ต้องการค้นหาข้อมูลบ่อยๆ โดยใช้คีย์เป็นตัวอ้างอิง

ปรับปรุงล่าสุด