【问题标题】:Can I have a set containing identical elements?我可以有一个包含相同元素的集合吗?
【发布时间】:2010-03-28 13:23:04
【问题描述】:

我用一套很方便。我喜欢如何将一个元素“添加”(“删除”)到(从)集合中。检查给定元素是否在集合中也很方便。

唯一的问题是,我发现如果集合中已经有这样的元素,我无法将新元素添加到集合中。是否可以有可以包含多个相同元素的“集合”。

【问题讨论】:

  • 为什么要拥有相同的元素?

标签: java collections unique set


【解决方案1】:

您必须使用 MultiSet 或 HashMap 来保存元素的数量。

附言使用 hashmap,您仍然使用 O(log n) 操作进行添加/删除

http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Multiset.html

【讨论】:

  • MultiSet 看起来非常有用 - 无法计算我编写了多少次代码来构建 Map 来计算另一种集合中对象的出现次数。 +1 增加我的知识
【解决方案2】:

如果您想要重复,Set 可能不是您最好的集合选择。集合,by definition,不允许重复:

不包含重复元素的集合。更正式地说,集合不包含一对元素 e1 和 e2,例如 e1.equals(e2),并且最多包含一个空元素。正如其名称所暗示的,此接口对数学集抽象进行建模。

除非您有一个真正需要使用 Set 的复杂用例(在这种情况下,您可以使用上面 @Frostman 描述的 MultiSet),您最好只使用 List

【讨论】:

    【解决方案3】:

    如果元素相同,则无需多次存储元素。如果您想跟踪每个元素的实例数,最好使用Map

    【讨论】:

      【解决方案4】:

      根据定义,Set 不能有重复的元素。 “重复”由元素的相等性定义(参见其equalshashCode 方法)。如果要重复,请使用允许重复的Collection,例如ArrayList

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-22
        • 2018-06-17
        • 1970-01-01
        • 2019-06-28
        • 2012-07-25
        • 1970-01-01
        • 1970-01-01
        • 2018-12-14
        相关资源
        最近更新 更多