我有转换表需要包含在内存中以便快速访问。到目前为止,我使用了一个简单Hashtable
的键是内部代码,而值是一个包含外部代码和其他元数据的对象。
现在我们需要进行反向查找,即根据外部代码获取内部代码。我只能提出以下选项:
- 有另一个容器用于此查找,Hashtable 仅包含内部代码作为值,以防止更多冗余。
- 使用我现在使用的同一个容器,现在使用外部代码作为 Key 再次存储这些对象(具有防止冲突的前缀)。
- 不要使用 Keys 提取数据,而是遍历同一容器下包含的 Values 以找到请求的对象( O(n), same memory usage )。
容器正在延迟加载,因此选项 1 和 2 通常不会在最坏的情况下执行。
有人想吗?请告诉我有一些我可以使用的高效容器,我错过了!
* 编辑 *
作为一个 GC'd 框架,并接受我必须有两个转换数组(字典)的事实,以下代码行实际上是否意味着我在内存上只存储了一个对象,然后在两个不同的情况下为它存储了两个指针散列单元格?
Dictionary<K1,V> forward;
Dictionary<K2,V> reverse;
//...
void Add(V myObject)
{
// myObject being the BLL object
forward.Add(myObject.InternalCode, myObject);
reverse.Add(myObject.ExternalCode, myObject);
}
伊塔马尔。