Java EnumMap
EnumMap 是一个特殊的 Map 类型,它的键必须是枚举类型的。在本教程中,我们将通过示例学习 Java EnumMap 类及其用法。
在本教程中,我们将通过示例学习 Java EnumMap 类及其用法。
EnumMap
是一个特殊的 Map 类型,它的键必须是枚举类型的。 EnumMap
实现了 Map
接口。
在我们了解 EnumMap
之前,请务必了解 Java 枚举。
创建 EnumMap
我们导入 java.util.EnumMap
类后,就可以通过构造方法创建 EnumMap
对象了。例如:
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
在上面的例子中,我们创建了一个名为 sizes
的 EnumMap 对象。
这里,
Size
- Map 中键的类型是枚举类型 SizeInteger
- Map 中值的类型是 Integer
EnumMap 的方法
EnumMap
类提供了操作 EnumMap 元素的各种方法。
将元素插入到 EnumMap
put()
- 将指定的键值对条目插入到 Map 中putAll()
- 将指定 Map 中的所有条目插入到 Map 中putIfAbsent()
- 如果 Map 中不存在指定的键,则将指定的键值对条目插入到 Map 中
例如,
import java.util.EnumMap;
public class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
EnumMap<Size, Integer> sizes1 = new EnumMap<>(Size.class);
// 添加元素
sizes1.put(Size.SMALL, 28);
sizes1.put(Size.MEDIUM, 32);
System.out.println("EnumMap1: " + sizes1);
EnumMap<Size, Integer> sizes2 = new EnumMap<>(Size.class);
// 添加多个元素
sizes2.putAll(sizes1);
sizes2.put(Size.LARGE, 36);
System.out.println("EnumMap2: " + sizes2);
}
}
输出
EnumMap1: {SMALL=28, MEDIUM=32}
EnumMap2: {SMALL=28, MEDIUM=32, LARGE=36}
在上面的例子中,我们使用了 putAll()
将 sizes1
中的元素全部插入到 sizes2
中。
另外,也可以使用 putAll()
插入来自其他类型的 Map 对象到 EnumMap 中,如 HashMap
, TreeMap
等,。但是,所有 Map 的键的类型都和目标 EnumMap 的键的类型一样。
entrySet()、keySet() 和 values()
entrySet()
- 返回 EnumMap 的所有键值对条目的 Set 集合keySet()
- 返回 EnumMap 的所有键组成的 Set 集合values()
- 返回 EnumMap 的所有值组成的集合
例如,
import java.util.EnumMap;
public class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
sizes.put(Size.SMALL, 28);
sizes.put(Size.MEDIUM, 32);
sizes.put(Size.LARGE, 36);
sizes.put(Size.EXTRALARGE, 40);
System.out.println("EnumMap: " + sizes);
System.out.println("Key/Value mappings: " + sizes.entrySet());
System.out.println("Keys: " + sizes.keySet());
System.out.println("Values: " + sizes.values());
}
}
输出
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
Key/Value mappings: [SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40]
Keys: [SMALL, MEDIUM, LARGE, EXTRALARGE]
Values: [28, 32, 36, 40]
get() 方法
get()
方法返回与指定键关联的值。如果未找到指定的键,则返回 null
。
例如,
import java.util.EnumMap;
public class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
sizes.put(Size.SMALL, 28);
sizes.put(Size.MEDIUM, 32);
sizes.put(Size.LARGE, 36);
sizes.put(Size.EXTRALARGE, 40);
System.out.println("EnumMap: " + sizes);
int value = sizes.get(Size.MEDIUM);
System.out.println("Value of MEDIUM: " + value);
}
}
输出
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
Value of MEDIUM: 32
删除 EnumMap 元素
remove(key)
- 删除并返回与指定键关联的条目remove(key, value)
- 删除与指定键和指定值匹配的条目,成功返回true
,否则返回false
。
例如,
import java.util.EnumMap;
public class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
sizes.put(Size.SMALL, 28);
sizes.put(Size.MEDIUM, 32);
sizes.put(Size.LARGE, 36);
sizes.put(Size.EXTRALARGE, 40);
System.out.println("EnumMap: " + sizes);
int value = sizes.remove(Size.MEDIUM);
System.out.println("Removed Value: " + value);
boolean result = sizes.remove(Size.SMALL, 28);
System.out.println("Is the entry {SMALL=28} removed? " + result);
System.out.println("Updated EnumMap: " + sizes);
}
}
输出
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
Removed Value: 32
Is the entry {SMALL=28} removed? true
Updated EnumMap: {LARGE=36, EXTRALARGE=40}
替换 EnumMap 元素
replace(key, value)
- 替换指定键的值为指定的值replace(key, old, new)
- 只有当指定的值与指定的旧值匹配的时候,采用新值替换replaceAll(function)
- 使用指定的接口函数运算每个条目的结果替换每个条目的值
import java.util.EnumMap;
public class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
sizes.put(Size.SMALL, 28);
sizes.put(Size.MEDIUM, 32);
sizes.put(Size.LARGE, 36);
sizes.put(Size.EXTRALARGE, 40);
System.out.println("EnumMap: " + sizes);
// replace()
sizes.replace(Size.MEDIUM, 30);
sizes.replace(Size.LARGE, 36, 34);
System.out.println("EnumMap using replace(): " + sizes);
// replaceAll()
sizes.replaceAll((key, oldValue) -> oldValue + 3);
System.out.println("EnumMap using replaceAll(): " + sizes);
}
}
输出
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
EnumMap using replace(): {SMALL=28, MEDIUM=30, LARGE=34, EXTRALARGE=40}
EnumMap using replaceAll(): {SMALL=31, MEDIUM=33, LARGE=37, EXTRALARGE=43}
在上面的程序中,注意语句
sizes.replaceAll((key, oldValue) -> oldValue + 3);
在这里,我们传递了一个 lambda 表达式作为参数。
EnumMap 的其他方法
clear()
: 从 EnumMap 中删除所有条目containsKey()
: 检查 EnumMap 是否包含指定的键containsValue()
: 检查 EnumMap 是否包含指定的值size()
: 返回 EnumMap 的大小isEmpty()
: 检查 EnumMap 是否为空