唯一键为每个java对象实例生成尽可能低的ID号
我想按照以下规则为对象生成ID号: 每个新对象将获得一个唯一的ID号(第一个ID号为1), 然后每个新对象将获得最低的可用ID号
例如,如果我声明4个对象 对象1 ID:1 对象2 ID:2 对象3 ID:3 对象4 ID:4
然后,如果我删除对象编号3。 因此,将生成的下一个对象将获得ID:3,而不是5
使用ID生成器的最佳方法是什么
你可以在下面搜索框中键入要查询的问题!
我想按照以下规则为对象生成ID号: 每个新对象将获得一个唯一的ID号(第一个ID号为1), 然后每个新对象将获得最低的可用ID号
例如,如果我声明4个对象 对象1 ID:1 对象2 ID:2 对象3 ID:3 对象4 ID:4
然后,如果我删除对象编号3。 因此,将生成的下一个对象将获得ID:3,而不是5
使用ID生成器的最佳方法是什么
# 1 楼答案
您可以使用
ConcurrentHashMap<Integer, Boolean>
来设置要使用的唯一ID。使用Boolean
值检查它们是否被使用。然后,使用ConcurrentHashMap<YourObject, Integer>
将所需对象存储在其相关ID内。因此,必须手动同步两个结构中的添加/删除,以始终定义可用的最低键请注意,拥有所有这些都是非常昂贵和难以维护的。最好使用第三方元素(可能是嵌入式数据库?)为你解决所有这些问题
# 2 楼答案
我想你想用Java来做。我建议如下:
具有用于为实体提供ID的序列。它非常简单,我认为不需要详细解释——它只返回1、2、3等。
现在我们需要处理删除。连同我建议的序列,有一个
SortedSet
的ID被删除,可以分配给新的实体将这两个结构结合在一起,表现为:
如果集合不是空的,则返回其第一个值并将其从集合中移除。它将是最低的值,因为您使用
SortedSet
如果为空,只需返回序列中的下一个数字
当然,您需要处理这个操作的原子性,并且可能会遇到并发问题,但对于这个问题,详细讨论它有点离题
# 3 楼答案
注意:这是我的方式,因为我不知道列表。如果有一个列表可以在没有算法的情况下完成这个问题,那就太好了。不要因为我的答案没有必要就投反对票
我想你可以有一个ArrayList,只需从中添加ID,并始终使用可用的最低ID
例如:
所以我所做的就是创建一个列表,其中id的值为正值,而在以前有id但现在不再有id的地方有负值。这样做的原因是,如果列表中的值为负数,我们可以直接替换它。例如: