Collections 给我一个多集合的实际用例

Collections 给我一个多集合的实际用例,collections,guava,Collections,Guava,我想知道一些实际的用例(如果它们与任何编程语言都不相关,那就更好了)。我可以将集合、列表和映射与实际用例相关联 例如,如果您想要一本书的词汇表,其中您想要的术语按字母顺序列出,并且位置/页码是值,那么您可以使用集合树映射(OrderedMap,它是一个映射) 不知何故,我无法将多集与任何“实际”用例相关联。有人知道有什么用途吗 还不够告诉我:) PS:如果你们认为这应该是社区维基,那没关系。我没有这样做的唯一原因是“有一个明确客观的方法来回答这个问题”。在数学的某些领域,集合在所有用途上都被视为

我想知道一些实际的用例(如果它们与任何编程语言都不相关,那就更好了)。我可以将集合、列表和映射与实际用例相关联

例如,如果您想要一本书的词汇表,其中您想要的术语按字母顺序列出,并且位置/页码是值,那么您可以使用集合树映射(OrderedMap,它是一个映射)

不知何故,我无法将多集与任何“实际”用例相关联。有人知道有什么用途吗

还不够告诉我:)


PS:如果你们认为这应该是社区维基,那没关系。我没有这样做的唯一原因是“有一个明确客观的方法来回答这个问题”。

在数学的某些领域,集合在所有用途上都被视为多重集合。例如,在线性代数中,当测试线性相关性时,向量集被测试为多集。 因此,这些字段的实现应该受益于多集的使用


你可能会说线性代数不实用,但那是一个完全不同的争论…

购物车是一个多集。当您想购买多个商品时,可以将同一商品的多个实例放在购物车中。

许多应用程序。例如,想象一辆购物车。它可以包含一个项目的多个实例,即2个cpu、3个图形板等,因此它是一个多集。一个简单的实现是还跟踪每个项目的数量,即保持在info 2 cpu、3个图形板等周围


我相信你可以想到很多其他的应用程序。

在很多情况下,如果没有地图,多集是很有用的。这里有三个例子

假设您有一个具有访问器getType()的类Foo,并且您想知道,对于Foo实例的集合,每个类型有多少个实例

类似地,系统可以执行各种操作,您可以使用Multiset跟踪每个操作发生的次数

最后,要确定两个集合是否包含相同的元素,忽略顺序但注意实例重复的频率,只需调用

HashMultiset.create(collection1).equals(HashMultiset.create(collection2))

到目前为止,这里没有一个答案能给出很好的解释。购物车只是一个映射
项目->计数
,一个常规字典。多集,OTOH,在上下文中变得非常有用,当我们发现它们的广义定义“集合并集”和“集合交集”的用法时。@Kos:我同意没有令人满意的答案,因为人们可以使用列表而不是多集。但是,即使对于并集和交集,multiset是否也有
O(n*n)
或者如果实现得好,
O(n*logn)
比较?它怎么会比列表/数组更好呢?但是映射(例如带有
item->count
映射的
map
不是更好的选择吗?也许对于一个非常特殊的情况,你肯定知道复制是非常罕见的,这可能会比空间消耗带来一些优势。但是对于一般情况,
map
更适合。@Sumudu是的,这就是通常实现
MultiSet
的方式。