Java 枚举映射
Java 枚举映射
在本教程中,我们将通过示例了解 Java EnumMap 类及其操作。
EnumMap
Java 集合框架的类为枚举的元素提供了映射实现。
在 EnumMap
, 枚举元素被用作 keys .它实现了 Map 接口。
在我们了解EnumMap
之前 ,请务必了解 Java 枚举。
创建一个枚举映射
为了创建枚举映射,我们必须导入 java.util.EnumMap
先打包。导入包后,我们可以通过以下方式在 Java 中创建枚举映射。
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
在上面的示例中,我们创建了一个名为 sizes 的枚举映射 .
在这里,
- 大小 - 键 映射到值的枚举
- 整数 - 价值观 与相应键关联的枚举映射的
EnumMap 的方法
EnumMap
类提供了允许我们在枚举映射上执行各种元素的方法。
向 EnumMap 插入元素
put()
- 将指定的键/值映射(条目)插入到枚举映射中putAll()
- 将指定地图的所有条目插入到该地图中
例如,
import java.util.EnumMap;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumMap of the Size enum
EnumMap<Size, Integer> sizes1 = new EnumMap<>(Size.class);
// Using the put() Method
sizes1.put(Size.SMALL, 28);
sizes1.put(Size.MEDIUM, 32);
System.out.println("EnumMap1: " + sizes1);
EnumMap<Size, Integer> sizes2 = new EnumMap<>(Size.class);
// Using the putAll() Method
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 的枚举映射 .
也可以插入来自其他地图的元素,例如 HashMap
, TreeMap
等到使用 putAll()
的枚举映射 .但是,所有映射都应该是相同的枚举类型。
访问 EnumMap 元素
1。使用 entrySet()、keySet() 和 values()
entrySet()
- 返回枚举映射的所有键/值映射(条目)的集合keySet()
- 返回枚举映射的所有键的集合values()
- 返回一组枚举映射的所有值
例如,
import java.util.EnumMap;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumMap of the Size enum
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);
// Using the entrySet() Method
System.out.println("Key/Value mappings: " + sizes.entrySet());
// Using the keySet() Method
System.out.println("Keys: " + sizes.keySet());
// Using the values() Method
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]
2。使用 get() 方法
get()
方法返回与指定键关联的值。它返回 null
如果没有找到指定的键。
例如,
import java.util.EnumMap;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumMap of the Size enum
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);
// Using the get() Method
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)
- 仅当指定键映射到指定值并返回布尔值时才从映射中删除条目
例如,
import java.util.EnumMap;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumMap of the Size enum
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);
// Using the remove() Method
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)
- 替换与指定 key 关联的值 通过新的 值replace(key, old, new)
- 替换 old new 的值 仅当 old 值已与指定的 key 关联replaceAll(function)
- 用指定 function 的结果替换 map 的每个值
import java.util.EnumMap;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumMap of the Size enum
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);
// Using the replace() Method
sizes.replace(Size.MEDIUM, 30);
sizes.replace(Size.LARGE, 36, 34);
System.out.println("EnumMap using replace(): " + sizes);
// Using the replaceAll() Method
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 表达式提供的新值。
其他方法
方法 | 说明 |
---|---|
clone() | 创建 EnumMap 的副本 |
containsKey() | 搜索 EnumMap 对于指定的键并返回一个布尔结果 |
containsValue() | 搜索EnumMap 为指定的值并返回一个布尔结果 |
size() | 返回EnumMap 的大小 |
clear() | 从 EnumMap 中删除所有条目 |
EnumSet 对比。枚举映射
EnumSet 和 EnumMap
类提供数据结构来存储枚举值。但是,它们之间存在一些重大差异。
- 枚举集在内部表示为位序列,而枚举映射在内部表示为数组。
- 枚举集是使用其预定义的方法创建的,例如
allOf()
,noneOf()
,of()
等。但是,枚举映射是使用其构造函数创建的。
可克隆和可序列化的接口
EnumMap
类还实现了 Cloneable
和 Serializable
接口。
可克隆界面
它允许 EnumMap
类来复制该类的实例。
可序列化接口
每当需要通过网络传输 Java 对象时,都需要将对象转换为位或字节。这是因为 Java 对象无法通过网络传输。
Serializable
接口允许类被序列化。这意味着实现 Serializable
的类的对象 可以转换为位或字节。
java