EnumMap giới thiệu trong JDK 5. Được thiết kế dùng Enum làm key trong Map. Cũng là triển khai của Map interface. Tất cả key trong EnumMap phải cùng enum type. Trong EnumMap, key không thể null và sẽ ném NullPointerException.
Theo Java Docs: EnumMap nội bộ dùng mảng (arrays), biểu diễn này cực kỳ compact và hiệu quả.
HashMap cũng là triển khai Map interface. Dùng lưu dữ liệu dạng Key-Value. Có thể chứa một null key và nhiều null values. Trong HashMap, key không thể là kiểu primitive. Java HashMap cung cấp hiệu suất constant-time cho các operation cơ bản (get, put), giả sử hash function phân phối đúng cách phần tử vào buckets.
| STT | Tiêu chí | EnumMap | HashMap |
|---|---|---|---|
| 1 | Cơ bản | Map triển khai chuyên biệt cho enum type keys | Triển khai Map interface chung |
| 2 | Null Key | Không thể có null key | Có thể có 1 null key và nhiều null values |
| 3 | Performance | Tất cả operation constant time, nhanh hơn HashMap | Chậm hơn EnumMap |
| 4 | Internal Implementation | Dùng Array nội bộ | Dùng Hashtable nội bộ (bucket array + linked list/tree) |
| 5 | Ordering | Lưu key theo thứ tự tự nhiên (natural order) của key | Không có thứ tự (unordered) |
Ví dụ EnumMap
import java.util.EnumMap;
import java.util.Map;
public class EnumMapExample {
public enum LaptopEnum { HCL, DELL, IBM }
public static void main(String[] args) {
EnumMap<LaptopEnum, String> map = new EnumMap<>(LaptopEnum.class);
map.put(LaptopEnum.HCL, "100");
map.put(LaptopEnum.DELL, "200");
map.put(LaptopEnum.IBM, "300");
for (Map.Entry<LaptopEnum, String> m : map.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
}
}
Ví dụ HashMap
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("HCL", "100");
map.put("DELL", "200");
map.put("IBM", "300");
for (Map.Entry<String, String> m : map.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
}
}