通过字典KeyCollection保持访问速度

问题描述 投票:0回答:1

我有一个仅使用

Dictionary<long, object>
的 keyCollection 的类,我想仅将键传递给其他类。

我知道字典有一个理论上的

O(1)
按索引访问(作为
HashTable
),但如果我将 keyCollection 转换为列表,访问将更改为
O(n)

我如何将 keyCollection 传递给我的类来维护

O(1)
访问权限?

编辑:我正在使用.NET 2.0。

c# .net list dictionary .net-2.0
1个回答
6
投票

在评论中,您提到您的意图是

.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);
}
© www.soinside.com 2019 - 2024. All rights reserved.