gpt4 book ai didi

java - 在remove()之后重新排序TreeMap

转载 作者:行者123 更新时间:2023-12-01 14:29:53 25 4
gpt4 key购买 nike

我有一个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 个帖子。然后,您的程序将必须移动 TreeMap 中的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com