Guava MultiSet против карты?

17

Мое понимание Multiset - это набор с частотой, но я всегда могу использовать Map для представления частоты, есть ли другая причина использовать Multiset?

    
задан Adam Lee 14.01.2012 в 08:13
источник

2 ответа

31

Преимущества Multiset<E> над Map<E, Integer> :

  • При добавлении элемента, который еще не находится в коллекции, не требуется специального кода.
  • Методы обработки счетчика элементов напрямую: count(E) , add(E, int) и т. д.
  • Цель кода более понятна. A Multiset<E> , очевидно, отображает элементы в их числа. A Map<E, Integer> может отображать элементы в произвольные целые числа.

См. также:

Multiset Javadoc

Multiset, объясненный в Guava Wiki

    
ответ дан Arend v. Reinersdorff 14.01.2012 в 09:41
источник
  • Кроме того, что, вероятно, более эффективно, чем ваша реализация, Multiset упрощает то, что вы на самом деле пытаетесь сделать, и это труднее испортить. Как правило, с помощью карты <E, Integer> вы имеете дело со множеством вещей: проверяете, находится ли ключ на карте, имеет ли счет нуль и все виды сложного бизнеса. Multiset просто работает. –  Louis Wasserman 14.01.2012 в 21:30
8

Для меня самый важный момент, который устанавливает Multiset , кроме Map , состоит в том, что это Collection : вы просто вкладываете в него материал, и вы можете получить счет позже. Он концептуально подходит для вариантов использования, для которых он сконструирован там, где Map нет. Для этих случаев использование Map - это просто хак, который вроде-sorta работает нормально, так как Java не предоставил ничего более подходящего.

    
ответ дан ColinD 14.01.2012 в 16:03
источник