2

可能是一个显而易见的问题,但我已经看到了很多为什么要在列表/数组上使用 HashSet 的原因。我听说它有 O(1) 用于删除和搜索数据。

我从未听说过为什么要在 HashSet 上使用列表。

那么为什么反过来呢?

4

4 回答 4

8
  • 列表允许重复,aHashSet不允许
  • 列表按其索引排序,aHashSet没有隐式顺序
  • 性能经常被高估,为工作选择合适的工具
于 2013-08-28T12:22:28.993 回答
3

它们有不同的语义。列表是有序的(按插入顺序),允许重复,并按索引提供随机访问;哈希集是无序的,不允许重复(根据设计删除它们),并且不提供随机访问。两者都是完全有效的,简单地说:适用于不同的场景。

于 2013-08-28T12:21:55.123 回答
1

Well for one, you can insert duplicates into a List/Array.

From HashSet.Add Method

Return Value Type:

System.Boolean

true if the element is added to the HashSet object;

false if the element is already present.

于 2013-08-28T12:21:08.720 回答
0

我参加聚会已经很晚了,但我想通过转过头来为所选答案添加一些内容:

何时在 List 上使用 HashSet?

  1. 当您在 Set 中的对象肯定是唯一的或者您不想添加重复项时。
  2. 如果某些对象在 Set 中,您经常想要查找。
  3. 如果您经常删除对象。添加对象与将对象添加到列表中所花费的时间大致相同,但在 HashSet 中删除它们要快得多。
  4. 如果您不关心订单或通过索引直接访问。

请记住,您也可以通过 HashSet “foreach”。

Rango 说得对,有时会高估绩效。但是如果性能很关键(并且顺序不重要),HashSets 可以比 Lists 快很多。

于 2019-05-11T20:45:28.253 回答