Java EnumMap 类:初学者指南
引言
你好,未来的Java程序员!今天,我们将开始一段激动人心的旅程,深入了解Java的EnumMap类。我知道你可能会想:“EnumMap?听起来好复杂!”但别担心!在本教程结束时,你将能够像专业人士一样使用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有三个构造函数。让我们看看每一个:
-
EnumMap(Class
keyType) EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);
这创建了一个空的EnumMap,其键为指定的枚举类型。
-
EnumMap(EnumMap<K,? extends V> m)
EnumMap<DaysOfWeek, String> activitiesCopy = new EnumMap<>(activities);
这创建了一个与指定EnumMap具有相同键类型的EnumMap,并用相同的映射(如果有)初始化。
-
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