我正在寻找是否有一个预先存在的 .Net“哈希集类型”实现适合原子化一般类型 T。我们有大量相同的对象用于序列化源,需要原子化以节省内存。
A Dictionary<T,T> with the value == key
工作完美,但是这些集合中的对象在应用程序中可能会达到数百万个,因此为每个对象存储 2 个引用似乎非常浪费。
HashSet
不能使用,因为它只有 Contains,没有办法吗?到达实际的成员实例。
显然我可以自己推出,但想检查是否有任何预先存在的东西。在 C5 上扫描并没有看到任何内容跳出来,但是他们 250 多页的文档确实让我怀疑我是否错过了一些东西。
EDIT 基本想法是我需要能够拿回独特的物体即 HashSet 有 Contains(T obj) 但没有 Get(T obj)/EDIT
最坏情况下的集合只需要实现:
T GetOrAdd(T candidate)
void Clear()
并取任意 IComparer
GetOrAdd 的时间复杂度为 ~O(1) 并且会ideally是原子的,即不会浪费时间进行两次哈希处理。
EDIT如果现有的实现失败,任何有关基本散列/分桶机制的来源的建议将不胜感激。 - Mono HashSet 源已经指出了这一点,因此本节得到了解答/EDIT
您可以获取一个源代码HashSet<T>
from 参考来源 http://referencesource.microsoft.com/#System.Core/System/Collections/Generic/HashSet.cs并编写您自己的 GetOrAdd 方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)