允许从列表界面中删除调用,但不从实现中删除项目

时间:2016-01-14 13:55:51

标签: java database list

我创建了一个列表实现来包装对数据库的调用并缓存返回对象。通过此实现,您可以遍历列表并在列表上执行大多数操作,并且实现将在需要时转到数据库以获取所请求的项目。但是,我正在努力弄清楚如何实现删除方法。我实际上无法从数据库中删除该元素。但是如果用户删除了元素0,那么当他们之后调用get(0)时,我的实现需要返回元素1.是否有人有这方面的经验并且可以帮助我解决这个问题?

2 个答案:

答案 0 :(得分:0)

所以,你想假装该项目不存在,但你仍然希望它由数据库支持。好吧,它可能是可能的,但它要么无效,要么你必须提出一些棘手的算法。

我现在唯一想到的是SortedMap<Integer, Integer>,它将index映射到how many rows you have to skip。例如,删除第5行,因此添加(5,1)。如果删除现在被视为5的行,则将其更改为(5,2)。如果删除第3行,则必须添加(3,1)并将另一个更改为(5,3)。然后删除第8行,然后添加(8,4)...

或者你可以保留你在特定指数上执行了多少删除的有序地图,例如,你在前面提到的例子中有(3,1),(5,2)和(8,4),但是你必须在每个get中迭代所有这些数字,而不是仅仅查看最接近的先前索引的地图并使数字随时可用。

答案 1 :(得分:0)

我能够通过索引列表来实现这一点。当我去删除一个时,我会从索引列表中删除相应的索引。然后,当我去检索一个元素时,我首先会转到索引数组,转到用户想要的索引,查找新索引,并使用它索引到未修改的列表。