题
从 Java 迁移到 .Net 时遇到的最大问题之一是 .Net 中没有 Set 接口。我知道有一些库可以下载,但是没有内置它的原因是什么?有地图(字典)和列表,但为什么没有集合?
编辑: :我应该澄清的是,并不是每个人都使用 .Net 3.5——所以我或多或少指的是旧版本的 .Net
解决方案
我认为这只是BCL作家的遗漏。 .NET 3.5有一个 HashSet 类;对于早期版本,我建议在值字段中包含一个Dictionary <!> lt; T,object <!> gt;,并使用空值来复制O(1)添加,删除和查找时间。
其他提示
在.NET 4.0中,HashSet
将被改装以实现新的ISet
接口。
.NET 3.5具有 HashSet ,可执行所有设置操作。
您的意思是 HashSet 吗?
这些天有HashSet<T>
,但遗憾的是没有我知道的界面。
正如其他人所说,有一个HashSet<T>
,实际上只是一个集合。
它有<!>“哈希<!>”的原因在它前面(因为它使用哈希来消除重复,所以集合的实现细节)是因为Set
是VB.NET中的关键字。
也许推理是一个集合实际上只是一个具有特定实现细节的列表,该列表限制其中的项目是不同的。由于列表的清晰度在实现而不是接口中,因此不需要接口。
正如其他人所说,FCL有 HashSet<T>
我最近也从 Java 转向.Net(由于专业工作),我必须承认我最初的问题也出在集合上。
在当前的 .Net 版本(3.5 以及 C# 中)中,您应该将自己定位于
ICollection
IList<T>
List<T>
IDictionary<TKey,TValue>
IEnumerable<T>
这些是最常用的(希望我没有错过一个)
可能是出于教育方面的考虑。
一个典型的程序员将一个集合视为一个神奇的容器,无论其中包含多少元素,它都能正常工作。
如果没有明确的设置,程序员就会被迫从其他类型中进行选择,同时这样做会反映元素数量和适当的数据结构,以达到良好的性能。
只是猜测。