Lớp java.util.EnumMap là triển khai Map chuyên biệt cho khóa enum. Các điểm quan trọng về EnumMap:
- Tất cả khóa trong enum map phải đến từ một kiểu enum đơn lẻ được chỉ định rõ hoặc ngầm khi tạo map.
- Enum map duy trì thứ tự tự nhiên của các khóa (theo thứ tự khai báo trong enum).
- EnumMap không đồng bộ hóa (not synchronized). Nếu nhiều thread truy cập đồng thời và ít nhất một thread sửa đổi map, cần đồng bộ hóa bên ngoài.
Các Constructor của EnumMap
| STT | Constructor & Mô tả |
|---|---|
| 1 | EnumMap(Class<K> keyType) Tạo enum map rỗng với kiểu khóa chỉ định. |
| 2 | EnumMap(EnumMap<K,? extends V> m) Tạo enum map với cùng kiểu khóa, copy mappings từ map cho trước. |
| 3 | EnumMap(Map<K,? extends V> m) Tạo enum map khởi tạo từ map chỉ định. |
Ví dụ 1: Tạo và clone EnumMap
import java.util.EnumMap;
public class Demo {
// Tạo enum
public enum Numbers { ONE, TWO, THREE, FOUR, FIVE }
public static void main(String[] args) {
EnumMap<Numbers, String> map1 = new EnumMap<Numbers, String>(Numbers.class);
EnumMap<Numbers, String> map2 = new EnumMap<Numbers, String>(Numbers.class);
// Gán giá trị cho map1
map1.put(Numbers.ONE, "1");
map1.put(Numbers.TWO, "2");
map1.put(Numbers.THREE, "3");
map1.put(Numbers.FOUR, "4");
// In toàn bộ map
System.out.println("map1: " + map1);
// Clone map1 sang map2
map2 = map1.clone();
System.out.println("map2: " + map2);
}
}
Kết quả
map1:{ONE=1, TWO=2, THREE=3, FOUR=4}
map2:{ONE=1, TWO=2, THREE=3, FOUR=4}
Ví dụ 2: Đếm số mapping key-value
import java.util.*;
public class EnumMapDemo {
public enum Numbers { ONE, TWO, THREE, FOUR, FIVE }
public static void main(String[] args) {
EnumMap<Numbers, String> map = new EnumMap<Numbers, String>(Numbers.class);
map.put(Numbers.ONE, "1");
map.put(Numbers.TWO, "2");
map.put(Numbers.THREE, "3");
map.put(Numbers.FOUR, "4");
System.out.println("Map: " + map);
System.out.println("Số mappings: " + map.size());
// Thêm giá trị mới
map.put(Numbers.FIVE, "5");
System.out.println("Số mappings mới: " + map.size());
}
}
Kết quả
Map: {ONE=1, TWO=2, THREE=3, FOUR=4}
Số mappings: 4
Số mappings mới: 5
Hiệu suất: EnumMap nhanh hơn HashMap cho key enum vì dùng mảng nội bộ thay vì hash table, tận hưởng thứ tự ordinal của enum.