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。

提前谢谢。

Pass Dictionary KeyCollection保留访问速度

在一条评论中,您提到您的意图是.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);
}