Java EnumMap 类:初学者指南

引言

你好,未来的Java程序员!今天,我们将开始一段激动人心的旅程,深入了解Java的EnumMap类。我知道你可能会想:“EnumMap?听起来好复杂!”但别担心!在本教程结束时,你将能够像专业人士一样使用EnumMap,甚至可能在这个过程中找到一些乐趣。

Java - EnumMap

让我们从一个简单的类比开始。想象你有一个特殊的抽屉,每天用来整理你的袜子。本质上,EnumMap就是这样——一个使用枚举常量作为键来组织数据的方式。很酷吧?让我们开始吧!

类声明

首先,让我们看看如何声明一个EnumMap:

import java.util.EnumMap;

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

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

在这个例子中,我们创建了一个使用我们的DaysOfWeek枚举作为键,String值来存储活动的EnumMap。DaysOfWeek.class部分告诉Java我们使用哪个枚举作为键。

类构造函数

EnumMap有三个构造函数。让我们看看每一个:

  1. EnumMap(Class keyType)

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

    这创建了一个空的EnumMap,其键为指定的枚举类型。

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

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

    这创建了一个与指定EnumMap具有相同键类型的EnumMap,并用相同的映射(如果有)初始化。

  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);

    这从常规Map创建了一个初始化的EnumMap。

类方法

现在,让我们看看EnumMap中一些最常用的方法:

方法 描述
put(K key, V value) 将指定的值与指定的键关联
get(Object key) 返回与指定键关联的值
remove(Object key) 如果存在,则删除此键的映射
size() 返回键值映射的数量
clear() 从此映射中删除所有映射
containsKey(Object key) 如果此映射包含指定键的映射,则返回true
containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回true

让我们看看这些方法的作用:

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

// 添加键值对
activities.put(DaysOfWeek.MONDAY, "Gym");
activities.put(DaysOfWeek.TUESDAY, "Cinema");

// 获取一个值
String mondayActivity = activities.get(DaysOfWeek.MONDAY);
System.out.println("周一的活动:" + mondayActivity);

// 检查一个键是否存在
boolean hasWednesday = activities.containsKey(DaysOfWeek.WEDNESDAY);
System.out.println("有周三:" + hasWednesday);

// 删除一个键值对
activities.remove(DaysOfWeek.TUESDAY);

// 获取大小
int size = activities.size();
System.out.println("活动数量:" + size);

// 清除映射
activities.clear();

在这个例子中,我们添加了不同天的活动,检索值,检查键,删除条目,最后清除整个映射。这就像整理和重新整理我们的袜子抽屉!

继承的方法

EnumMap从其父类继承了方法。以下是一些有用的方法:

方法 继承自 描述
clone() AbstractMap 创建此映射的浅拷贝
equals(Object o) AbstractMap 将指定的对象与此映射进行相等性比较
hashCode() AbstractMap 返回此映射的哈希码值
toString() AbstractMap 返回此映射的字符串表示形式

向EnumMap添加枚举,整数键值对示例

现在,让我们尝试一些更复杂的事情。我们将创建一个使用枚举作为键和整数作为值的EnumMap:

enum Fruit { APPLE, BANANA, ORANGE, MANGO }

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

// 添加键值对
fruitPrices.put(Fruit.APPLE, 100);
fruitPrices.put(Fruit.BANANA, 80);
fruitPrices.put(Fruit.ORANGE, 120);
fruitPrices.put(Fruit.MANGO, 150);

// 打印EnumMap
System.out.println("水果价格:" + fruitPrices);

// 更新一个值
fruitPrices.put(Fruit.BANANA, 90);

// 获取一个特定的值
int applePrice = fruitPrices.get(Fruit.APPLE);
System.out.println("苹果的价格:" + applePrice);

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

在这个例子中,我们创建了一个水果价格列表。我们为不同的水果添加价格,更新香蕉的价格,检索苹果的价格,然后遍历整个映射以打印所有水果的价格。

就这样!你已经学会了Java的EnumMap类的基础知识。记住,熟能生巧,所以不要害怕尝试这些概念。谁知道呢?你可能会发现自己用EnumMaps来整理你的整个生活!(开个玩笑,但它们确实很有用。)

编程愉快,愿你的EnumMaps永远井井有条!

Credits: Image by storyset