【问题标题】:Why no SortedMultiset in Google Collections?为什么 Google Collections 中没有 SortedMultiset?
【发布时间】:2009-08-25 21:40:30
【问题描述】:

Google Collections包含Multiset接口和TreeMultiset类,但我惊讶地发现没有对应的SortedMultiset接口。

类似的东西对于建模离散概率分布非常有用。

在我尝试自己实现它之前,我想知道是否有特定的原因将其排除在外,例如可能违反MultisetCollection 不变量,或固有性能问题等。


编辑:我最初并没有意识到,但这实际上是 3 个单独的请求:

  1. 一种方法的返回类型的更改 (TreeMultiset.entrySet)
  2. TreeMultiset 现有功能相匹配的新界面
  3. 对树的分支计数求和的新方法

【问题讨论】:

  • 为什么需要实现它?与TreeMultiset 有何不同?
  • 它将具有与 TreeMultiset 所缺乏的 headSet/tailSet/subSet 等价物。我不确定是否可以通过扩展 TreeMultiset 来有效地实现这些。
  • 它的entrySet() 方法也会返回一个SortedSet 而不是一个普通的Set

标签: java guava


【解决方案1】:

我认为只是还没有人需要它,所以我们还没有写出来。这是我会考虑的。

【讨论】:

  • 对于重读此问题的任何人,版本 11 都有一个 SortedMultiset。
【解决方案2】:

TreeMultiset.elementSet() 返回一个 SortedSet,它可能提供一些你想要的功能。

ETA:finnw,您请求的 SortedMultiset 方法不会为“我的 Multiset 中有多少元素小于 42?”这个问题提供明显更快的答案。 TreeMultiset 实现仍然需要遍历多重集条目并对相关元素的计数求和。

【讨论】:

  • 差不多。它不能有效地做的一件事是回答“我的 Multiset 中有多少元素小于 42?”元素集(及其 headSet/tailSet 方法)将为您提供小于 42 的不同值的数量,而不是元素的数量。
猜你喜欢
  • 2011-01-23
  • 2012-01-28
  • 1970-01-01
  • 2013-11-16
  • 2012-06-23
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多