java - 获取特定状态下 hashmap 中新添加、删除、修改的值

标签 java collections hashmap

我有一个应用程序,它分阶段对 HashMap 进行操作,从某种意义上说,它添加/删除/修改不同类中的键。 考虑通过扩展 Map 类来创建包装类。 并破解预定义的放置和删除方法。

第一阶段:

HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("Key1","Value1");
hashMap.put("Key2","Value2");
hashMap.put("Key3","Value3");
hashMap.put("Key4", "Value4");

期望结果:
添加:
键1:值1
键2:值2
键3:值3
键4:值4

第二阶段:

hashMap.remove("Key1");

期望结果:
删除:
键1:值1

第三阶段:

hashMap.put("Key2", "ChangedValue");

期望结果:
修改:
Key2:更改值

仅获取 diff 的最佳方法或最佳逻辑是什么? dataStructure HASHMAP 已修复。

最佳答案

最简单的方法是将 HashMap 扩展为您自己的类,并记录更改:

class RecordHashMap extends HashMap<String,String> {
    private List<String[]> changes;

    public RecordHashMap() {
      super();
      changes = new ArrayList<String[]>();
    }

    @Override
    public String put(String key, String value) {

        if (containsKey(key)) {
            changes.add(new String[]{"modified",key,value});
        } else {
            changes.add(new String[]{"added",key,value});
        }
        return super.put(key, value);
     }

     @Override
     public String remove(Object key) {
         if (containsKey(key)) {
             String value = get(key);
             changes.add (new String[]{"removed",(String)key,value});
         }
         return super.remove(key);
     }

     public List<String[]> getChanges() {

         return changes;
    }
}

这样您就可以随时检查最后的更改,因为它们都已记录。当然,您可以在录制时或稍后将它们打印出来。您可以添加一个索引计数器(以允许仅查看 x 最近的更改),因为您将它们存储在数组列表中。

关于java - 获取特定状态下 hashmap 中新添加、删除、修改的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45614982/

相关文章:

Java Runtime.getRuntime().exec 无法捕获所有输出

java - 在 arraylist for 循环中执行 Collections.swap() 是否安全?

java - 如何创建自定义对象的集合或数组

Ruby Mysql2 使用符号而不是字符串作为键返回结果哈希

java - hashmap.get() 的拆箱会产生 NullPointerException

java - 如何使 org.apache.cxf.interceptor.LoggingInInterceptor 登录自定义日志文件

java - java 中的 vnc 服务器,有这样的东西吗?开源?

java - 重复变化的代码(组合)?

.net - 使用 .Net/C# 计算集合的频率分布

java - 从给定 id 的 List<Obj> 获取 Obj,无需迭代整个 List