.net 为什么';Net有一套数据结构吗?

.net 为什么';Net有一套数据结构吗?,.net,data-structures,set,.net,Data Structures,Set,我处理从Java迁移到.Net的最大问题之一是.Net中没有设置接口。我知道有些库我可以去下载,但是为什么没有内置呢?有地图(字典)和列表,但为什么没有一套呢 编辑:我应该澄清的是,还不是每个人都在使用.Net 3.5——所以我或多或少是指.Net的旧版本你是指一个吗?现在有了哈希集,但遗憾的是,我不知道有什么接口。我认为这只是BCL作者的疏忽。NET3.5有一个类;对于早期版本,我建议包装一个字典,在值字段中使用空值,以复制O(1)添加、删除和查找时间。可能原因是集合实际上只是一个列表,具有特

我处理从Java迁移到.Net的最大问题之一是.Net中没有设置接口。我知道有些库我可以去下载,但是为什么没有内置呢?有地图(字典)和列表,但为什么没有一套呢


编辑:我应该澄清的是,还不是每个人都在使用.Net 3.5——所以我或多或少是指.Net的旧版本

你是指一个吗?

现在有了
哈希集
,但遗憾的是,我不知道有什么接口。

我认为这只是BCL作者的疏忽。NET3.5有一个类;对于早期版本,我建议包装一个字典,在值字段中使用空值,以复制O(1)添加、删除和查找时间。

可能原因是集合实际上只是一个列表,具有特定的实现细节,限制其中的项是不同的。由于列表的区别在于实现而不是接口,因此不需要接口


正如其他人所提到的,FCL有.NET 3.5,它执行所有设置操作。

可能是出于教育考虑

一个典型的程序员将集合视为一个神奇的容器,无论其中包含多少元素,它都能正常工作

如果没有显式的集合,程序员将被迫从其他类型中进行选择,并在这样做时反映元素计数和适当的数据结构,以实现良好的性能


这只是一个猜测。

正如其他人所指出的,有一个
HashSet
,它实际上只是一个集合


它前面有“hash”的原因(集合的一个实现细节,因为它使用hash来消除重复项)是因为
set
是VB.NET中的一个关键字。

在.NET 4.0
HashSet
中,将进行改装,甚至实现新的
ISet
接口。

我最近也从Java迁移到了.NET(由于专业工作),我必须承认,我最初的问题也是在收款方面。
在当前的.Net版本(3.5和C#)中,您应该将自己定位在

  • i收集
  • IList
  • 列表
  • IDictionary
  • IEnumerable

这些是最常用的(希望我没有错过一个)

你忘记了列表和集合之间的一个巨大区别:列表是有序的,而集合不是有序的。我注意到,.Net实现者有时会对平台采取过于学术的方法。构建基本工具。其他一切都是实现细节。将元素限制为不同远不是实现细节。这是v数据类型接口的很大一部分。性能上的另一大区别是:在List=O(n)和Set(比如在Java或.NET中)=O(1)中按值查找项。这个答案和这些评论,虽然可能不完全正确,但似乎实际上最好地回答了我的问题。顺便说一句,这正是Java的Set实现是如何工作的。我特别想知道的是为什么它没有很快实现,只有BCL团队可以回答。对我来说,这似乎是一个重大的遗漏。我还使用了I当我想要一个没有类型信息的广义可枚举项,并且要通过.NET2泛型非协方差时,在点处可枚举