remove()后重新排序TreeMap

时间:2013-06-05 08:31:10

标签: java treemap

我的treeMap包含guestbookEntries。密钥用于订购和分页。我有一个问题,当我删除一个条目时,size()的{​​{1}}会减少,这会导致帖子被覆盖,例如因为我正在创建一个密钥为guestbookEntries的新条目。

为了改变这种情况,我想重新排序guestbookEntries.size() + 1,以便在删除键值对时。以下所有密钥的数量减少了一个,因此TreeMap中不应存在“间隙”,导致TreeMap再次正确。

我在考虑这样的事情,其中​​guestbookEntries.size()是被删除的条目的关键。

postNumber

有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

我认为,这个解决方案实际上是非常糟糕的主意。想象一下,您希望在留言簿中创建帖子编号。其他人想通过其id引用这些帖子。但是当你将你的帖子转移回去时,你可能会减少他们所做的id个问题,因为那个人想要参考帖子。

此外,想象一下,有人删除了帖子#0,你的留言簿中已有100,000个帖子。然后,您的程序将不得不在树形图中移动99,999个帖子对象,减少它们的数量。

在这种情况下唯一可能的好解决方案,不要使用guestbookEntries.size() + 1作为生成新帖子ID的基础。

而不是只创建一些静态整数字段,使用一些并发就绪类是很好的解决方案,例如AtomicInteger

static AtomicInteger postIdGenerator = new AtomicInteger(0);

为新帖子解析id,您唯一需要做的就是:postIdGenerator.incrementAndGet()