0

我有一个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);
}

有没有更简单的方法呢?

4

1 回答 1

1

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

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

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

与其仅仅创建一些静态整数字段,不如使用一些并发就绪类,例如AtomicInteger.

static AtomicInteger postIdGenerator = new AtomicInteger(0);

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

于 2013-06-05T08:58:24.693 回答