我正在构建一个应用程序,需要使用一个集合来存储大约10k个字符串。
这个集合将被用作队列。
因此,我查看了 C# 中不同的集合类型,但无法确定哪种集合在排队时以速度最快地执行 Put 和 Get 操作方面具有最佳性能。同时还要能够防止队列/集合中出现重复项。
根据评论编辑:
任何现有的集合都会有所帮助。或者一个可以比任何现有集合表现更好的自定义集合将是很好的选择。
谢谢
我正在构建一个应用程序,需要使用一个集合来存储大约10k个字符串。
这个集合将被用作队列。
因此,我查看了 C# 中不同的集合类型,但无法确定哪种集合在排队时以速度最快地执行 Put 和 Get 操作方面具有最佳性能。同时还要能够防止队列/集合中出现重复项。
根据评论编辑:
任何现有的集合都会有所帮助。或者一个可以比任何现有集合表现更好的自定义集合将是很好的选择。
谢谢
如果您正在寻找高性能的Put & Get,同时检查唯一性(重复检查),但顺序不重要(不是队列),则使用HashSet<T>
如果队列功能更重要,则使用Queue<T>
我认为没有任何东西可以同时提供两者。
你介意使用O(2n)的内存吗?你可以使用Queue<>和Dictionary<,>结合使用。队列将处理入队和出队操作,而字典则可以确保唯一性。一个简单的包装类可以将这两个组合起来,并且它会为你提供O(log n)的入队和出队时间。
示例:
public class SetQueue<T>
{
private readonly Dictionary<T, bool> duplicates = new Dictionary<T, bool>();
private readonly Queue<T> queue = new Queue<T>();
public bool Enqueue(T item)
{
if (!duplicates.ContainsKey(item))
{
duplicates[item] = true;
queue.Enqueue(item);
return true;
}
return false;
}
public T Dequeue()
{
if (queue.Count >0)
{
var item = queue.Dequeue();
if (!duplicates.ContainsKey(item))
throw new InvalidOperationException("The dictionary should have contained an item");
else
duplicates.Remove(item);
return item;
}
throw new InvalidOperationException("Can't dequeue on an empty queue.");
}
}