在哈希集中实现FIFO行为

时间:2013-08-13 20:22:40

标签: c# .net data-structures hashset

我有一个要求,即集合中的每个元素必须是唯一的,为此我使用了一个hashset。

但是我也希望根据First In First我们的订单从hashset中删除元素。但是,.NET中的默认Hashset DataStructure没有此行为。

是否有任何方法可以扩展hashset来实现此行为,还是应该使用其他一些数据结构。

3 个答案:

答案 0 :(得分:5)

您可以将哈希集与队列配对。哈希集将为您提供O(1)复杂度,以测试该元素是否在队列中,并且队列将为您提供先进先出行为,同样在O(1)

如果您正在存储引用类型,则使用这两个数据结构的额外空间开销将是最小的(引用数量的两倍)。

如果您正在使用值类型,自平衡二进制搜索树将为您提供O(log n)中的查找和插入,但允许您只存储每个元素的一个副本。

答案 1 :(得分:1)

扩展HS是不可能的。你可以试试OrderedDictionary。您将null放入“值”并仅使用Key。它可以通过Key和插入顺序访问。遗憾的是它不是强类型的(它来自.NET 1.1时代......技术上它来自.NET 2.0,但很明显它是在创建泛型之前设计的。)

OrderedDictionary myOrderedDictionary = new OrderedDictionary();
myOrderedDictionary.Add("testKey1", null);
myOrderedDictionary.Add("testKey2", null);
myOrderedDictionary.Add("keyToDelete", null);
myOrderedDictionary.Add("testKey3", null);

// Remove first
myOrderedDictionary.RemoveAt(0);

// Check for existance
if (myOrderedDictionary.Contains("something")) {
}

答案 2 :(得分:0)

HashSet在这里使用不正确。

Queue或其延伸将是您最好的选择。