我正在使用 C#,但即使您不知道,也应该很容易理解这个问题。
这是我的问题:我想将一些对象保存在类似哈希集的数据结构中,以便可以根据int
ID 查找它们。这些对象具有可变属性,因此对它们进行散列不是一种选择(我需要一些关于它们的常量来散列,是吗?)。
我所做的是开发以下接口:
public interface IUniqueIDCollection
{
// Can return any int that hasn't been requested yet.
public int RequestUniqueID();
// Undos the requesting of an int
public int ReleaseUniqueID(int uniqueID);
}
我最初的想法是在请求 ID 时将内部计数器存储在IUniqueIDCollection
增量中。但是,一旦 ID 被释放,我将不得不跟踪已删除的范围或单个 ID。我认为后者会更好。但是,如果我使用计数器(或任何循环函数)来生成 ID,我将遇到一个问题,即必须检查已连续请求的 ID 序列,一旦计数器回绕,则未释放。
启发式是这样的:假设一次最多请求 5,000 个 ID。但是,ID 通常会请求然后发布。释放往往会在范围内发生——即可能会一次请求全部 100 个,然后在很短的时间间隔内释放所有 100 个。
我知道我可以使用 GUID 或其他东西而不是 int,但我想节省 ID 的空间/带宽/处理时间。
所以我的问题是:就伪代码而言,给定启发式方法,我上面给出的接口中的请求和释放方法应该是什么样子?