从 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>

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

可能是出于教育方面的考虑。

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

如果没有明确的设置,程序员就会被迫从其他类型中进行选择,同时这样做会反映元素数量和适当的数据结构,以达到良好的性能。

只是猜测。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top