我有一个包含treeMapguestbookEntries。这些键用于排序和分页。我有一个问题,当我删除条目时,size()guestbookEntries会减少,这会导致帖子被覆盖,例如因为我正在使用键guestbookEntries.size() + 1创建新条目。

为了更改此设置,我想对TreeMap重新排序,以便在删除键值对时使用。以下所有键的数量都减少了一个,因此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个发布对象,从而减少其数量。

在这种情况下,唯一可行的解​​决方案就是不要使用guestbookEntries.size() + 1作为生成新帖子ID的依据。

代替仅创建一些静态整数字段,使用一些并发就绪的类(例如AtomicInteger)将是一个很好的解决方案。

static AtomicInteger postIdGenerator = new AtomicInteger(0);


解决新帖子的id唯一要做的就是:postIdGenerator.incrementAndGet()

关于java - 在remove()之后重新排序TreeMap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16935063/

10-09 03:51