我有一个包含guestbookEntries
的treeMap
。键用于排序和分页。我遇到的问题是,当我删除一个条目时,guestbookEntries
的size()
减少,这导致帖子被覆盖,例如,因为我正在创建一个密钥为guestbookEntries.size() + 1
的新条目。
为了改变这一点,我想重新排序我的TreeMap
,以便当我删除一个键值对。以下所有键的数量减少1,因此在TreeMap
中应该没有"间隙",导致guestbookEntries.size()
再次正确。
我正在考虑类似的东西,其中postNumber
是被删除的条目的键。
for(int i = postNumber; i < guestbookEntries.size(); i++) {
Guestbook gb = guestbookEntries.get(i + 1);
guestbookEntries.put(postNumber, gb);
guestbookEntries.remove(postNumber + 1);
}
有更简单的方法吗?
我认为,这种解决方案实际上是一个非常糟糕的主意。假设您希望在您的留言簿中创建帖子编号。其他人想参考其id
的帖子。但是当你把你的帖子转回来,减少他们的id
时,你可能会给那个想要参考帖子的人带来麻烦。
此外,想象一下,有人删除了帖子#0,而您的留言簿中已经有100,000个帖子。然后,你的程序将不得不在树状图中移动99,999个post对象,减少它们的数量。
在这种情况下,唯一可能的好解决方案是不使用guestbookEntries.size() + 1
作为生成新帖子id的基础。
与其这样,不如创建一些静态整数字段,使用一些并发类(例如AtomicInteger
)将是一个很好的解决方案。
static AtomicInteger postIdGenerator = new AtomicInteger(0);
为新帖子解析id
,您需要做的唯一事情是:postIdGenerator.incrementAndGet()
.