我有一个应用程序,它分阶段对 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/