code: private List<E> snapshot() {
      List<E> list = Lists.newArrayListWithExpectedSize(size());
      for (Multiset.Entry<E> entry : entrySet()) {
        E element = entry.getElement();
        for (int i = entry.getCount(); i > 0; i--) {
          list.add(element);
        }
      }
      return list;
    }
docs: /*
  We'd love to use 'new ArrayList(this)' or 'list.addAll(this)', but
  either of these would recurse back to us again!