【问题标题】:What are the advantages of Sets and set based operations?集合和基于集合的操作有什么优点?
【发布时间】:2011-11-11 00:05:20
【问题描述】:

我知道集合是什么以及集合上的常见操作,如联合、交集、差异、子集。但是我不明白在哪些情况下需要基于设置的操作?任何现实世界的例子?使用集合与使用列表或哈希相比有什么优势?如果我有两个列表,那么我也可以找到这些列表的并集和交集。那么为什么要使用集合呢?

编辑 我特别想知道我应该使用集合而不是列表的现实世界情况。

【问题讨论】:

  • 为什么投反对票?如果您投反对票,请发表评论
  • 来自常见问题解答:您应该只根据您面临的实际问题提出实际的、可回答的问题。
  • 所以你说这不是一个实际问题?我正在我的程序中使用数据结构,我想知道我是否应该使用 List、Hash 或 Set?而且我认为它也可以回答,所以我不明白你的担忧。
  • 哈希并不是真正的集合。它是一种用于索引列表或集合的算法。您实际上可以在 Java API 中实现这一点。

标签: c# java .net data-structures


【解决方案1】:

Set 保证其中没有重复的对象。 List 没有,因此您可以在列表中拥有多个“相等”对象的条目。有数以百万计的东西可以使用 set,它会让你的生活更轻松,例如,一组国家,一组用户名等。如果你使用列表来存储这些数据,你需要检查是否在添加新元素之前,您的列表是否已经包含相同的元素,除非允许列表有重复项。

换句话说,集合可以被认为是一个没有任何重复的列表。但是,Java 中 Set 和 List 的接口并不完全相同。例如,您无法获取集合中某个位置的元素。这是因为位置在集合中并不重要(但对于列表而言)。因此,选择使用哪种数据收集完全取决于目的。

我自己发现Set 在很多情况下都非常有用,并且减少了检查重复项的次数。我的一个用例是使用 set 来查找分子中有多少化学元素。该分子包含一个原子对象列表,每个原子都与一个元素符号相关联,因此为了找到元素的类型,我循环遍历所有原子并将元素添加到元素集。删除所有重复项都毫不费力。

【讨论】:

  • 谢谢,我正在寻找这样的示例用法,我现在明白了。
【解决方案2】:

除其他外,集合通常保证 O(logN) 的访问时间。它们还只强制一个具有给定值的条目(通过在您尝试添加重复项时抛出异常)。

哈希通常提供 O(1) 访问,但不保证唯一性。

【讨论】:

    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2010-11-08
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多