java 双层map怎么设置默认值
时间: 2025-01-07 15:55:40 浏览: 29
### 如何在 Java 中为嵌套 Map 设置默认值
为了给嵌套 `Map` 设定默认值,在创建内部映射时可以初始化其键对应的值。如果外部或内部映射遇到不存在的键,则应提供一个新的映射作为该键的值并返回它。
下面是一个简单的例子来展示如何实现这一点:
```java
import java.util.HashMap;
import java.util.Map;
public class NestedMapExample {
public static void main(String[] args) {
// 创建一个外层 map,默认情况下,当访问未存在的 key 时会自动创建新的 HashMap 并关联到此 key 上。
Map<String, Map<Integer, String>> outerMap = new HashMap<>() {
@Override
public Map<Integer, String> get(Object key) {
if (!containsKey(key)) {
put((String)key, new HashMap<>());
}
return super.get(key);
}
};
// 向嵌套结构中添加数据
outerMap.get("colors").put(1, "Red");
outerMap.get("colors").put(2, "Green");
System.out.println(outerMap); // 输出 {colors={1=Red, 2=Green}}
// 尝试获取之前未曾设定过的路径下的 value,这不会抛出异常而是得到 null 或者自定义的默认值
System.out.println(outerMap.get("shapes").getOrDefault(3, "Circle")); // 输出 Circle
// 如果希望 shapes 下也存在记录即使它是空的,可以通过覆写 get 方法做到这点
System.out.println(outerMap.containsKey("shapes")); // true 即使我们从未显式地向其中放入任何东西
}
}
```
在这个案例里,通过重载 `HashMap#get()` 来确保每当请求某个特定字符串类型的键所指向的地图对象时——无论这个键是否存在——都会有一个新实例被创建出来并与之绑定[^1]。对于内层地图中的整数型键而言,使用了 `getOrDefault()` 方法以便能够指定缺省项;而对外部容器来说则是依靠覆盖后的逻辑实现了相同的效果。
阅读全文
相关推荐














