ImmutableDictionary

来自姬鸿昌的知识库
Jihongchang讨论 | 贡献2025年11月27日 (四) 03:08的版本 (建立内容为“ImmutableDictionary.java<syntaxhighlight lang="java"> import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; /** *…”的新页面)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

ImmutableDictionary.java

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 一个在初始化后就不可变的字典类。
 * 外部代码无法添加,修改或删除其内容
 * @param <K>
 * @param <V>
 */
public class ImmutableDictionary<K, V> {

    // 使用 final 修饰,确保引用不会被改变
    private final Map<K, V> internalMap;

    /**
     * 构造函数,接收一个初始化的键值对映射。
     * @param internalMap 用于初始化的 Map
     */
    public ImmutableDictionary(Map<K, V> internalMap) {
        // 1. 创建一个新的 HashMap,避免外部修改传入的 initialMap
        // 2. 使用 Collections.unmodifiableMap 包装它,确保内部也无法修改
        this.internalMap = Collections.unmodifiableMap(new HashMap<>(internalMap));
    }

    /**
     * 获取指定键的值。
     * @param key 值
     * @return 对应的值,如果不存在则返回 null
     */
    public V get(Object key) {
        return internalMap.get(key);
    }

    /**
     * 检查是否包含指定的键。
     * @param key
     * @return 如果包含则返回 true,否则返回 false
     */
    public boolean containsKey(Object key) {
        return internalMap.containsKey(key);
    }

    /**
     * 获取所有键的集合。
     * @return 一个不可修改的键的集合
     */
    public Set<K> keySet() {
        return internalMap.keySet();
    }

    /**
     * 返回字典的大小。
     * @return 键值对的数量
     */
    public int size() {
        return internalMap.size();
    }

    /**
     * 检查字典是否为空
     * @return 如果为空则返回 true
     */
    public boolean isEmpty() {
        return internalMap.isEmpty();
    }
}