java - 实现 Map 的保存(或提交)和回滚方法

标签 java collections commit object-persistence

我正在寻找一种快速便捷的方法来将 save() 和 rollback() 添加到标准 Map。假设我有一个 Table 类的对象“table”,该对象又具有一个名为“rows”的私有(private) Map。我想要实现的是一种快速且没有内存浪费的方法,让 Row 执行以下操作:

row = new Row();
table.addRow(row).setValue("col1", "foo").setValue("col2", "bar").save();
row.setValue("col2", "beer");
System.out.println(table.getRows()); // 1. col1=foo, col2=bar

row.save();
System.out.println(table.getRows()); // 1. col1=foo, col2=beer

实际上,我的设计非常简单:当调用 addRow() 时,我将行放入 map 内;没有缓冲区,没有临时元素;我只是将整个 Row 实例传递给 rows 集合。但我需要一种快速方法并且(如果可能的话)避免行重复。

有什么想法吗?

最佳答案

这听起来太像“我想在内存中保存新值和旧值,但我不想在内存中保存新值和旧值”。

选项:

a) 所有 added 的 map 元素,保存时执行 putAll .

b) 你的 map ,而不是<ClassKey, ClassValue> ,持有<ClassKey, ClassValue2>Value2拥有 ClassValue 的两项,新实例和旧实例。在save ,您将新的(如果有)传递给旧的。仅当您更改每个“事务”中的大部分条目时,它才会有用。

没有提到删除元素的问题,这会给你带来更多的乐趣。使用选项 2,您可以将 boolean 值设置为 Value2 ,使用选项 a 您将需要更多解决方法。

关于java - 实现 Map 的保存(或提交)和回滚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13922809/

相关文章:

java - 如何在 thenReturn 函数中返回传递给 Mockito 模拟方法的参数?

java - 优先级队列不维护排序顺序

collections - 为什么整数必须先转换为字符串才能用于访问集合中的项目?

git - 如何将我当前的更改提交到 Git 中的不同分支

svn - 如何强制 subversion 提交未更改的文件?

svn - 如何从命令行仅提交内容更改而不提交属性更改?

java - 多平台 getResourceAsStream

java - 获取 JSON 格式的 Twitter 提要

jar - 如何将JRE与jar文件打包,以便在Java独立机器上运行

java - 如果字符串包含相同的大写和小写字符,如何在哈希集中添加字符串值?