c# - 什么时候应该使用 HashSet<T> 类型?

标签 c# .net data-structures hashset

我正在探索 HashSet<T>类型,但我不明白它在集合中的位置。

可以用它来代替List<T>吗? ?我想象 HashSet<T> 的表现变得更好,但我看不到个人访问它的元素。

难道只是为了枚举?

最佳答案

重要的是HashSet<T>就在名称中:它是一个集合。您可以对单个集合做的唯一事情就是确定它的成员是什么,并检查一个项目是否是一个成员。

询问是否可以检索单个元素(例如 set[45] )是对集合概念的误解。没有集合的第 45 个元素这样的东西。集合中的项目没有顺序。集合 {1, 2, 3} 和 {2, 3, 1} 在各个方面都是相同的,因为它们具有相同的成员资格,而成员资格才是最重要的。

遍历 HashSet<T> 有点危险因为这样做会对集合中的项目强加顺序。该顺序实际上并不是该集合的属性。你不应该依赖它。如果集合中项目的排序对您很重要,则该集合不是集合。

集真的是有限的,而且成员都是独一无二的。另一方面,它们的速度非常快。

关于c# - 什么时候应该使用 HashSet<T> 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1247442/

相关文章:

c# - 用于 native C++ 的 C++/CLI 包装器,可在 C# 中用作引用

c# - 在 C# 中序列化集合时摆脱 "ArrayOf"前缀

c# - 在 C# 中发现串行端口

java - Java 中对于 "multidimensional"列表使用的最佳数据结构是什么?

java - 在 Java 中循环遍历 List<Map<Integer, Map<Long, Integer>>>

c# - C++ 等同于 C# 的 Func<T, TResult>

c# - HttpContext null,代码路径采用不同的线程

c# - 在 .net 2 中生成唯一集的最快方法是什么

c# - ToolStripLayoutStyle.Table 在 ContextMenuStrip 中不起作用

algorithm - 计算随机放在 table 上的卡片所覆盖的区域