在制作我的程序时,我遇到了这个要求,我必须为我创建的一些对象分配唯一的ID。现在我在GUI上动态创建对象,最初我使用简单的计数器将int值分配给创建的节点,它工作得很好。
然而,这种方法产生的问题是,如果在创建GUI时,如果必须删除某个节点,则此ID也将被删除,并且永远不会再次使用。对于下一个新节点,每次我必须使用最新的计数器值,如果在此过程中删除节点,则会创建大量缺少的int值。
我想在创建新节点时重用那些缺少的id,为此我很困惑我应该添加哪种方法。
我的想法:
你能建议我该怎么做吗?可能是我需要某种堆栈,我可以推送值,排序并使用最小值,如果我使用它,它从这个堆栈中删除,请给出一些关于如何完成此任务的想法?< / p>
答案 0 :(得分:4)
保留已删除ID的列表,并在创建新节点时,检查该列表以查找要重复使用的ID(与您采取的无关);如果列表为空(如最初的那样),则获取新ID“旧方式”。更聪明的是:如果列表中没有任何已删除的ID,则将列表设置为生成新ID的对象,这样调用者就不必担心ID到达的位置。
答案 1 :(得分:3)
您可以使用TreeSet
(自动排序从最小到最大添加的所有条目)来存储已删除的ID(myTreeSet.add(old_id)
)。这样,当您去创建新实例时,您将首先检查TreeSet
中是否有任何条目。要获取最低值,您可以使用myTreeSet.first()
(应该是O(1)
操作)。如果TreeSet
为空,这意味着当前正在使用所有已知的ID,那么您将继续正常使用下一个可用的ID。
答案 2 :(得分:1)
答案 3 :(得分:0)
只有节点很少时,第一个解决方案才能正常工作!想象一下拥有数千个节点的应用程序!内存消耗怎么样? Hashmap解决方案更适合您的目标,需要更少的控制。