ในโปรแกรมมิ่ง Data types ใช้จำแนกชนิดข้อมูล แต่ละชนิดเก็บต่างกัน และชนิดข้อมูลกำหนด operation ที่ทำได้
ใน Java คลาสหนึ่งที่สำคัญคือ Java HashMap class ส่วนหนึ่งของ Collections Framework ให้นักพัฒนาจัดเก็บข้อมูลด้วย Map data type (key-value pairs)
บทช่วยสอนนี้อธิบายพื้นฐาน HashMap การสร้าง และเมธอดหลัก พร้อมตัวอย่าง
Java Maps และ HashMap
Java Map interface จัดเก็บค่าแบบ key/value pairs Key = ค่า unique ที่เชื่อมกับ value เฉพาะ ใน Java Map ไม่มี duplicate keys ทุก key ต้อง map กับ value
โครงสร้าง key/value ให้เข้าถึง value ผ่าน key เช่น map มี key gbp value United Kingdom เรียก key gbp -> ได้ "United Kingdom"
HashMap class ใน Collections Framework ใช้ Map interface และ hash tables (เก็บ key-value items แบบพิเศษ)
ก่อนสร้าง HashMap ต้อง import:
import java.util.HashMap;
สร้าง HashMap
ไวยากรณ์:
HashMap<KeyType, ValueType> map_name = new HashMap<KeyType, ValueType>(capacity, loadFactor);
องค์ประกอบ:
- HashMap: บอกว่าเป็น hashmap
- <KeyType, ValueType>: ชนิดข้อมูล key และ value
- map_name: ชื่อ hashmap
- new HashMap<KeyType, ValueType>: เริ่มต้น hashmap ด้วยชนิดข้อมูลที่กำหนด
- capacity: จำนวน entry สูงสุด (default 16) - optional
- loadFactor: threshold ขยาย hash table (default 0.75 = 75%) - optional
ตัวอย่าง: ร้านแลกเปลี่ยนสกุลเงิน
โปรแกรมเก็บชื่อประเทศและรหัสสกุลเงินที่ให้บริการ เหมาะกับ HashMap เพราะมี 2 ค่าที่เกี่ยวข้อง: ชื่อประเทศ และ currency code
import java.util.HashMap; HashMap<String, String> currencyCodes = new HashMap<String, String>();
ประกาศ HashMap currencyCodes เก็บ String key และ String value พร้อมเพิ่มข้อมูล
เพิ่มรายการ (Add Items)
เมธอด put() ใช้เพิ่มค่าใน HashMap แบบ key/value
เพิ่ม GBP/United Kingdom และ USD/United States:
import java.util.HashMap;
class CurrencyExchange {
public static void main(String[] args) {
HashMap<String, String> currencyCodes = new HashMap<String, String>();
currencyCodes.put("GBP", "United Kingdom");
currencyCodes.put("USD", "United States");
System.out.println(currencyCodes);
}
}
ผลลัพธ์: {GBP=United Kingdom, USD=United States}
สร้าง hashmap ใช้ put() เพิ่ม entry key GBP value United Kingdom พิมพ์ hashmap
เข้าถึงรายการ (Access an Item)
ใช้เมธอด get() รับพารามิเตอร์ 1 ตัว: key name ที่ต้องการ value
ดึงชื่อประเทศของ GBP:
String gbp = currencyCodes.get("GBP");
System.out.println(gbp);
ผลลัพธ์: United Kingdom
ลบรายการ (Remove an Item)
เมธอด remove() ลบ entry ตาม key พารามิเตอร์ 1 ตัว: key name
ลบ GBP:
currencyCodes.remove("GBP");
System.out.println(currencyCodes);
ผลลัพธ์: {USD=United States}
เพิ่มเติม: clear() ลบรายการทั้งหมด ไม่มีพารามิเตอร์ คืน HashMap ว่าง {}
แทนที่ค่าใน HashMap (Replace Elements)
เมธอด replace() แทนที่ value ของ key เดิม ด้วย value ใหม่ รับ 2 พารามิเตอร์: key ที่จะแทนที่, value ใหม่
แทนที่ "United Kingdom" -> "Great Britain" สำหรับ key GBP:
currencyCodes.replace("GBP", "Great Britain");
System.out.println(currencyCodes);
ผลลัพธ์: {GBP=Great Britain, USD=United States}
วนลูป HashMap (Iterate Through a HashMap)
HashMap มี 3 เมธอดสำหรับ iteration:
keySet(): วน keysvalues(): วน valuesentrySet(): วน keys และ values คู่กัน
วิธีง่ายสุด: ใช้ for-each loop
ตัวอย่าง: พิมพ์ค่า (values) ทั้งหมด
พิมพ์รายการสกุลเงินที่ร้านให้บริการ:
import java.util.HashMap;
class CurrencyExchange {
public static void main(String[] args) {
HashMap<String, String> currencyCodes = new HashMap<String, String>();
currencyCodes.put("GBP", "Great Britain");
currencyCodes.put("USD", "United States");
for(String value : currencyCodes.values()) {
System.out.println(value);
}
}
}
ผลลัพธ์:
Great Britain United States
for-each วน currencyCodes.values() พิมพ์แต่ละค่า บรรทัดใหม่
อยากวน keys แทน -> เปลี่ยน values() เป็น keySet() จะได้:
GBP USD
สรุป
Java HashMap class จัดเก็บข้อมูลแบบ key/value collection structure เหมาะกับข้อมูล 2 ค่าที่เกี่ยวข้องกัน บทช่วยสอนนี้ครอบคลุม: สร้าง HashMap, put(), get(), remove(), clear(), replace(), iteration ด้วย keySet(), values(), entrySet() ตอนนี้คุณพร้อมทำงานกับ Java HashMaps อย่างมืออาชีพแล้ว!