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
- การค้นหาข้อมูลเร็วมาก (เวลาเฉลี่ย O(1))
- เหมาะสำหรับการเก็บข้อมูลที่ต้องการค้นหาด้วยคีย์บ่อยๆ
- สามารถเก็บข้อมูลได้หลากหลายรูปแบบ (ขึ้นอยู่กับประเภทของคีย์และค่า)
- ไม่อนุญาตให้มีคีย์ซ้ำ ทำให้ข้อมูลไม่ซ้ำซ้อน
ตัวอย่างการใช้งานจริง
มาลองทำโปรแกรมพจนานุกรมง่ายๆ กัน:
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) อย่างรวดเร็ว เหมาะสำหรับการใช้งานที่ต้องการค้นหาข้อมูลบ่อยๆ โดยใช้คีย์เป็นตัวอ้างอิง