我有一个包含treeMap
的guestbookEntries
。这些键用于排序和分页。我有一个问题,当我删除条目时,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/