在特定状态下获取hashmap中新添加,删除,修改的值

时间:2017-08-10 13:22:17

标签: java collections hashmap

我有一个应用程序,它在阶段对hashmap进行操作,因为它在不同的类中添加/删除/修改键。 想通过扩展Map类来创建包装类。 并且黑客化了预定义的put和remove方法。

第1阶段:

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

期望的结果:
加了:
 Key1:Value1
 Key2:Value2
 Key3:Value3
 Key4:Value4

第2阶段:

hashMap.remove("Key1");

期望的结果:
移除:
Key1:Value1

第3阶段:

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

期望的结果:
修改:
Key2:ChangedValue

只获得差异的最佳方式或最佳逻辑是什么? dataStructure HASHMAP是固定的。

1 个答案:

答案 0 :(得分:1)

最简单的方法是将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最近的更改),因为您将它们存储在数组列表中。