【发布时间】:2012-04-29 23:19:08
【问题描述】:
在制作我的程序时,我遇到了这个要求,我必须为我创建的一些对象分配唯一的 ID。现在我在 GUI 上动态创建对象,最初我使用简单的计数器将 int 值分配给创建的节点,它工作得很好。
但是,这种方法产生的问题是,如果在创建 GUI 时,如果必须删除某个节点,则该 id 也会被删除并且不再使用。对于下一个新节点,每次我必须使用最新的计数器值,如果在此过程中删除节点,这会产生大量缺失的 int 值。
我想在创建新节点时重用那些丢失的 id,为此我很困惑我应该添加哪种方法。
我的想法:
- 使用包含可用值的 ArrayList,以及如果一个节点 被删除,它的 id 被添加到这个列表中,我对这个列表进行排序并使用 新节点的最小值。很好,但是,当我使用这个值时,如果 我从列表中删除它,索引没有被删除,这导致 问题。
- HashMap,与上面类似,我添加了可用的 id 并删除了未使用的,但不确定如何对这个 hashMap 进行排序???
你能建议我应该怎么做吗?可能我需要某种堆栈,我可以在其中推送值,对其进行排序并使用最小值,如果我使用了,它会从这个堆栈中删除,请给出一些关于如何完成这个任务的想法???
【问题讨论】:
-
重复使用丢失的 id 有什么实际好处,还是只是为了好玩?
-
@mellamokb,只是一个外观问题,否则 id 仍然是独一无二的,没有问题,但如果它很容易,我想这样做
-
id 空间中的空白是否有任何实际后果?你
aren't将它们存储在一个数组中,是吗? -
@mellamokb,这是一个很好的观点。数据库不会通过尝试重用旧标识符来分配数字键。除非有充分的理由,否则每次增加都会更有效率,仅此而已。
-
@911TurboS 即使有一个简单的方法可以做到这一点,除非你有充分的理由,否则你仍然在浪费资源来重新分配已删除的 id