Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Lớp EnumMap trong Java

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

STTConstructor & Mô tả
1EnumMap(Class<K> keyType)
Tạo enum map rỗng với kiểu khóa chỉ định.
2EnumMap(EnumMap<K,? extends V> m)
Tạo enum map với cùng kiểu khóa, copy mappings từ map cho trước.
3EnumMap(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.