【问题标题】:Java: Wrapping objects in some type of collection to store duplicates in a setJava:将对象包装在某种类型的集合中以将重复项存储在集合中
【发布时间】:2017-03-06 21:45:04
【问题描述】:

我想制作一组某种类型的集合(还不确定是哪一个)作为在集合中“存储重复项”的一种方式。例如,如果我想将整数 5 与 39 个附加副本相加,我可以将它放入索引 39 处的数组列表中。因此,如果我要获取数组列表的大小,我会知道集合中存在 5 的多少个副本。

我还有其他几种方法可以实现这一点,但我还没有决定哪一种。我在实现这一点时遇到的主要问题是我不确定如何“动态”创建数组列表(或我最终可能使用的任何集合),以便每当有人调用mySet.add(object) 时,对象是第一个插入到唯一的数组列表中,然后插入到集合本身中。

谁能给我一些关于如何解决这个问题的想法?

编辑:

抱歉,我的问题应该更清楚。我正在编写的代码的重点是我们有一个允许重复的集合。是的,一些相关的方法将被重写/必须被重写。另外,我的代码应该是在我们不知道要插入什么类型的对象(尽管每组只有一种数据类型),也不知道将添加多少相同对象的实例,也不知道将添加多少不同的唯一对象的假设下编写的.

【问题讨论】:

  • 为什么不使用ArrayList<Integer>Set 不应有重复项。
  • 有时,如果您定义您的集合可以支持的操作,您的要求会更清楚。 add的合约是什么?还需要什么其他操作?这听起来像是Multiset<T>,基本上是Map<T, Integer> 的特化。
  • 为什么不简单地存储一个对象出现的次数?
  • @JamesKPolk 我正在考虑这样做,但对于集合来说这并不难,因为将对象添加到集合中的顺序无关紧要,迭代会产生随机输出。因此,我怎么知道哪个计数属于哪个对象。我正在考虑编写某种内部类,它基本上创建一个由“数据”变量和“计数”变量组成的新对象

标签: java duplicates set


【解决方案1】:

我宁愿使用Map 之类的

HashMap list <Object, Integer>

其中 Object 是您要计数的对象,Integer 是计数

【讨论】:

  • 已编辑问题以添加更多信息...对不起,一开始没有说清楚,但我正在编写代码来制作一个允许重复的集合。
  • 重复的目的是什么?
  • 对不起,如果它仍然不清楚,但除了我的代码的目标是创建一个允许重复的类似集合之外没有其他目的。
  • 根据 Elliot 的原始评论,A Set 不应该有重复项因此您试图将 Object 用于错误的目的。要使用的正确对象是 Map
  • 再次抱歉,如果它仍然不清楚,但我正在制作一个“类似集合”的集合。我没有使用实际的集合并试图找到一种存储重复项的方法。此外,大多数与集合相关的方法都将被重写以适应这种“类似集合”的集合。
【解决方案2】:

你可以试试guava的MultiSet,我想这就是你想要的。

它可以存储每个对象的计数。你需要做的只是 multiSet.put(对象); 如果它是第一次放入,就像你说的那样,将创建一个新列表,或者它的计数将加一。

【讨论】:

  • 已编辑问题以添加更多信息...对不起,一开始没有说清楚,但我正在编写代码来制作一个允许重复的集合。
  • 您的意思是要存储不止一种类型的对象,而且每种类型也可能重复?
  • 对不起,如果它仍然不清楚,但这个集合中只允许一种类型的对象。对于该对象类型,插入此集合中的任何对象都可以有重复项。
  • 那么 MultiSet 有什么问题呢?我真的认为这正是你想要的。见github.com/google/guava/wiki/NewCollectionTypesExplained
  • 很抱歉,如果它仍然不清楚,但在这种情况下使用多重集对我来说是不可接受的。我正在制作一个“类集合”集合(不使用实际集合),其中通常与集合相关联的方法将被重写以反映这个允许重复的“类集合”集合。
猜你喜欢
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
相关资源
最近更新 更多