Pass Dictionary KeyCollection保留访问速度
本文关键字:访问 速度 保留 KeyCollection Dictionary Pass | 更新日期: 2023-09-27 18:19:55
我有一个类,它只使用Dictionary<long, object>
的keyCollection,我只想将键传递给其他类。
我知道字典有一个理论上的O(1)
通过索引访问(作为HashTable
),但如果我将keyCollection转换为List,则访问将更改为O(n)
。
如何将keyCollection传递给维护O(1)
访问权限的类?
编辑:我使用的是.NET 2.0。
提前谢谢。
在一条评论中,您提到您的意图是.Contains()
。在这种情况下,您要寻找的是HashSet<T>
,它正是这样做的——它只保存密钥(没有值),并提供快速的Contains
检查。所以对于您的Dictionary<long,object>
,您可以执行以下操作:
var set = new HashSet<long>(dictionary.Keys);
然后把它传过去。为了方便起见,HashSet<T>
实现了ICollection<T>
(如果您想将其范围限定为一个接口,而不是具体类型)——它也有一个Contains
。
事实上,它可能更有效地使用(它也适用于.NET 2.0):
ICollection<long> = dictionary.Keys;
并通过;Contains(key)
的实现是O(1),因为它是通过实现的
bool ICollection<TKey>.Contains(TKey item)
{
return this.dictionary.ContainsKey(item);
}