Lớp EnumMap Java: Hướng Dẫn Cho Người Mới Bắt Đầu

Giới Thiệu

Xin chào các bạn, những lập trình viên Java tương lai! Hôm nay, chúng ta sẽ bắt đầu hành trình thú vị vào thế giới của lớp EnumMap trong Java. Tôi biết bạn có thể suy nghĩ: "EnumMap? Đó có vẻ khó hiểu!" Nhưng đừng lo lắng! Cuối tutorial này, bạn sẽ sử dụng EnumMap như một chuyên gia, và bạn có thể thậm chí còn có chút niềm vui trong quá trình học.

Java - EnumMap

Hãy bắt đầu với một Analogy đơn giản. Hãy tưởng tượng bạn có một chiếcdrawer đặc biệt cho mỗi ngày trong tuần để tổ chức đôisock của bạn. Đó chính là điều gì mà EnumMap là – một cách để tổ chức dữ liệu sử dụng các hằng số enum như khóa. Cool, phải không? Hãy nhảy vào!

Khai Báo Lớp

Trước tiên là trước, hãy xem cách chúng ta khai báo một EnumMap:

import java.util.EnumMap;

enum DaysOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);

Trong ví dụ này, chúng ta đang tạo một EnumMap sử dụng enum DaysOfWeek của chúng ta như khóa và giá trị String để lưu trữ các hoạt động. Phần DaysOfWeek.class kể với Java enum nào chúng ta đang sử dụng cho khóa của mình.

Các Hàm Khởi Tạo Của Lớp

EnumMap có ba hàm khởi tạo. Hãy xem từng một:

  1. EnumMap(Class keyType)

    EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);

    Điều này tạo một EnumMap trống với các khóa của loại enum được chỉ định.

  2. EnumMap(EnumMap<K,? extends V> m)

    EnumMap<DaysOfWeek, String> activitiesCopy = new EnumMap<>(activities);

    Điều này tạo một EnumMap với cùng loại khóa như EnumMap được chỉ định và khởi tạo nó với các ánh xạ tương tự (nếu có).

  3. EnumMap(Map<K,? extends V> m)

    Map<DaysOfWeek, String> regularMap = new HashMap<>();
    regularMap.put(DaysOfWeek.MONDAY, "Gym");
    EnumMap<DaysOfWeek, String> activitiesFromMap = new EnumMap<>(regularMap);

    Điều này tạo một EnumMap khởi tạo từ một Map thường.

Các Phương Thức Của Lớp

Bây giờ, hãy xem một số phương thức thường được sử dụng trong EnumMap:

Phương Thức Mô Tả
put(K key, V value) Kết hợp giá trị được chỉ định với khóa được chỉ định
get(Object key) Trả về giá trị liên kết với khóa được chỉ định
remove(Object key) Xóa ánh xạ cho khóa này nếu có
size() Trả về số lượng các ánh xạ khóa-giá trị
clear() Xóa tất cả các ánh xạ khỏi bản đồ này
containsKey(Object key) Trả về true nếu bản đồ này chứa ánh xạ cho khóa được chỉ định
containsValue(Object value) Trả về true nếu bản đồ này ánh xạ một hoặc nhiều khóa đến giá trị được chỉ định

Hãy xem các phương thức này hoạt động:

EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);

// Thêm các cặp khóa-giá trị
activities.put(DaysOfWeek.MONDAY, "Gym");
activities.put(DaysOfWeek.TUESDAY, "Cinema");

// Lấy một giá trị
String mondayActivity = activities.get(DaysOfWeek.MONDAY);
System.out.println("Hoạt động của thứ Hai: " + mondayActivity);

// Kiểm tra nếu một khóa tồn tại
boolean hasWednesday = activities.containsKey(DaysOfWeek.WEDNESDAY);
System.out.println("Có thứ Tư: " + hasWednesday);

// Xóa một cặp khóa-giá trị
activities.remove(DaysOfWeek.TUESDAY);

// Lấy kích thước
int size = activities.size();
System.out.println("Số lượng hoạt động: " + size);

// Xóa bản đồ
activities.clear();

Trong ví dụ này, chúng ta đang thêm các hoạt động cho các ngày khác nhau, truy xuất giá trị, kiểm tra các khóa, xóa các mục và cuối cùng là xóa toàn bộ bản đồ. Đó giống như tổ chức và tổ chức lại chiếcdrawer đôi sock của chúng ta!

Các Phương Thức Kế Thừa

EnumMap kế thừa các phương thức từ các lớp cha của nó. Dưới đây là một số phương thức hữu ích:

Phương Thức Kế Thừa Từ Mô Tả
clone() AbstractMap Tạo một bản sao nhỏ độc của bản đồ này
equals(Object o) AbstractMap So sánh đối tượng được chỉ định với bản đồ này để bằng nhau
hashCode() AbstractMap Trả về giá trị băm cho bản đồ này
toString() AbstractMap Trả về một chuỗi đại diện cho bản đồ này

Thêm Một Cặp Khóa-Giá Trị Vào EnumMap Of Enum, Integer Pair Example

Bây giờ, hãy thử một điều phức tạp hơn. Chúng ta sẽ tạo một EnumMap sử dụng một enum như khóa và các số nguyên như giá trị:

enum Fruit { APPLE, BANANA, ORANGE, MANGO }

EnumMap<Fruit, Integer> fruitPrices = new EnumMap<>(Fruit.class);

// Thêm các cặp khóa-giá trị
fruitPrices.put(Fruit.APPLE, 100);
fruitPrices.put(Fruit.BANANA, 80);
fruitPrices.put(Fruit.ORANGE, 120);
fruitPrices.put(Fruit.MANGO, 150);

// In ra EnumMap
System.out.println("Giá Trái Cây: " + fruitPrices);

// Cập nhật một giá trị
fruitPrices.put(Fruit.BANANA, 90);

// Lấy một giá trị cụ thể
int applePrice = fruitPrices.get(Fruit.APPLE);
System.out.println("Giá của Táo: " + applePrice);

// Duyệt qua EnumMap
for (Map.Entry<Fruit, Integer> entry : fruitPrices.entrySet()) {
System.out.println(entry.getKey() + ": $" + entry.getValue());
}

Trong ví dụ này, chúng ta đang tạo một danh sách giá trái cây. Chúng ta thêm giá cho các loại trái cây khác nhau, cập nhật giá của chuối, lấy giá của táo và cuối cùng là duyệt qua toàn bộ bản đồ để in ra tất cả giá trái cây.

Và thế là! Bạn đã học được các khái niệm cơ bản về lớp EnumMap của Java. Hãy nhớ, luyện tập sẽ làm bạn hoàn hảo, vì vậy đừng sợ thử nghiệm các khái niệm này. Ai biết? Bạn có thể sẽ tổ chức toàn bộ cuộc sống của mình với EnumMaps! (Chỉ đùa, nhưng chúng rất hữu ích.)

Chúc mãi mãi lập trình vui vẻ, và may EnumMap của bạn luôn được tổ chức tốt!

Credits: Image by storyset