2011-03-13 81 views
1

我正在搜索数据结构来存储唯一索引(整数)列表。对我来说最重要的特点是:
- 快速检查是否在设定值的存在价值 - 就像在哈希表
- 小尺寸的内存和序列化之后 - 像阵列
它当然应该支持添加,删除元素,但这种行为的表现并不重要。快速搜索和小尺寸搜索数据结构

框架中是否有任何这样的结构?或者我应该创建它?

使用示例: 我有班级为用户和在这个类中的几个(〜20)各种数据列表。 (访问,特权,文件等)。我需要将用户数据存储在缓存中以便在回发期间快速访问 - 每次查询数据库都非常缓慢。整数是在分贝指数,

+0

可能的重复[在.NET中是否有排序的集合类型?](http://stackoverflow.com/questions/196512/is-there-a-sorted-collection-type-in​​-net) – 2011-03-13 17:45:50

+0

你是否意味着行为如列表? – 2011-03-13 17:45:56

+0

指数是否在一定范围内?即我假定它们是正值,但是你是否知道它们会低于某个值N? – I82Much 2011-03-13 17:46:17

回答

4

我认为你正在寻找的HashSet <牛逼> http://msdn.microsoft.com/en-us/library/bb359438.aspx

它的实施,使得它提供了O(1)查找(或者这样的文件说,但我怀疑它真的是由于它使用哈希表实现,所以分期偿还O(1)...)并支持许多集合操作。

我不确定它的序列化格式,但我会进一步调查它。如果你真的想它序列化到一个数组,你总是可以做

var mySet = new HashSet<T>(new []{ 1, 2, 3, 3, 4, 5, 4, 5 }); 
Serialize(mySet.ToArray()); 

,然后反序列化刚刚创建的序列化阵列一个HashSet。

+0

['HashSet .Contains()'](http://msdn.microsoft.com/zh-cn/library/bb356440.aspx)根据文档是O(1),而不是O(log n) – 2011-03-13 17:52:19

+0

是,那是正确的。我正在考虑使用红黑树实现的SortedSet(T)。 – Jake 2011-03-13 17:56:01

+0

你是对的 - 我忘了字典的变种。它速度很快,但序列化后的大小比序列化列表大2倍。但我认为这就是我正在寻找的:) – 2011-03-18 08:06:36