java - 是否可以将 HashMap 的某些特定键设置为只读?

标签 java hashmap

我有 5 个不能删除/更新的 key 。我提供了我自己的方法来添加、获取和删除此 HashMap 的键。

UnmodifiableMap 将使所有键成为只读的,所以我也不能使用它。我可以维护这些只读键的 List,每当调用添加/删除方法时,我都可以引用此 List 并阻止操作。但是还有其他更好的方法来实现这一目标吗?

提前致谢!

编辑:我知道我可以扩展 HashMap 并覆盖 put 方法。这和我在上面的问题描述中所说的类似(维护只读键的 List 并防止对其进行操作)。我认为可能有一种方法可以将 UnmodifiableMap 合并到 HashMap 中,这样来自 UnmodifiableMap 的键将在新的 HashMap 和其他键将支持所有操作。

最佳答案

作为Andre提到,您可以继承自 HashMap 或其他 Map 实现。

这是一个匿名类的快速示例,自包含在 main 方法中:

public static void main(String[] args) {
    Map<String, String> myMap = new HashMap<String, String>() {

        private static final long serialVersionUID = 6585814488311720276L;
        @Override
        public String put(String key, String value) {
            if (key != null && !key.equalsIgnoreCase("foo")) {
                return super.put(key, value);
            }
            else {
                throw new IllegalArgumentException("No foo's allowed!");
            }
        }
        // TODO!
        @Override
        public void putAll(Map<? extends String, ? extends String> m) {
            // TODO Auto-generated method stub
            super.putAll(m);
        }
    };
    System.out.println(myMap.put("blah", "blah"));
    System.out.println(myMap.put("foo", "blah"));
}

输出

null
Exception in thread "main" java.lang.IllegalArgumentException: No foo's allowed!
    at test.Main$1.put(Main.java:18)
    at test.Main$1.put(Main.java:1)
    at test.Main.main(Main.java:29)

关于java - 是否可以将 HashMap 的某些特定键设置为只读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24574350/

相关文章:

java - 如何使用提供的客户端 ID 和客户端密码提供对 protected 端点的访问?

java - 自动复制新的Jar文件到Tomcat工程WEB-INF/lib文件夹

java - 在java中对集合进行排序

C++:将 HashMap 内容复制到指针列表

java - LinkedHashMap 的 put() 方法内部是如何工作的?

java - Hibernate 复杂的唯一约束

java - 覆盖图形内容的窗口框架

javascript - 在 javascript 中渲染 Hash 的模板是什么

java - JBoss AS 7 JMX 控制台

Java 内存高效键值存储