gpt4 book ai didi

java - AtomicLongMap 与 ConcurrentHashMultiset

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:42 24 4
gpt4 key购买 nike

来自 AtomicLongMap 的文档:

Note: If your values are always positive and less than 2^31, you may wish to use a Multiset such as ConcurrentHashMultiset instead. Warning: Unlike Multiset, entries whose values are zero are not automatically removed from the map. Instead they must be removed manually with removeAllZeros().

它表明您可能希望使用 Multiset。我的问题是,Multiset 比 AtomicLongMap 有什么好处?选择仅包含正值的映射时应考虑哪些因素?使用 Multiset 的唯一原因是我不需要手动调用 removeAllZeros() 吗?

最佳答案

Multiset在概念上是不同的。首先,它是一个 Collection , 所以它可以用作 Collection ,而 AtomicLongMap不是集合(也不是 map )。多重集表示一组可能重复的元素,要对它们的计数执行数学运算,您可以添加或删除元素。 AtomicLongMap方法名称更符合 AtomicLong类并明确假设您正在对值执行数学运算。一种或另一种实现可能不支持某些操作。比如有addAndGetgetAndAdd行动 AtomicLongMap ,但是Multiset只有add类似getAndAdd 的方法.

因此虽然在许多情况下这些类是可以互换的,但请使用 ConcurrentHashMultiset如果您将数据视为可能重复元素的集合。使用 AtomicLongMap如果您将数据视为键和 long 之间的映射值(value)。

请注意,从 Java-8 开始,这些类可以很容易地用标准 JDK 替换 ConcurrentHashMap<K, Long> .例如,您可以使用 map.merge(key, 1L, Long::sum);增加映射值。

关于java - AtomicLongMap 与 ConcurrentHashMultiset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32046502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com