在remove()之后重新排序TreeMap



我有一个包含guestbookEntriestreeMap。键用于排序和分页。我遇到的问题是,当我删除一个条目时,guestbookEntriessize()减少,这导致帖子被覆盖,例如,因为我正在创建一个密钥为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() .

最新更新