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