@SuppressWarnings("unchecked")
 SerializedForm(SortedMultiset<E> multiset) {
   this.comparator = multiset.comparator();
   int n = multiset.entrySet().size();
   elements = (E[]) new Object[n];
   counts = new int[n];
   int i = 0;
   for (Entry<E> entry : multiset.entrySet()) {
     elements[i] = entry.getElement();
     counts[i] = entry.getCount();
     i++;
   }
 }
 /**
  * Returns an immutable sorted multiset containing the elements of a sorted multiset, sorted by
  * the same {@code Comparator}. That behavior differs from {@link #copyOf(Iterable)}, which always
  * uses the natural ordering of the elements.
  *
  * <p>Despite the method name, this method attempts to avoid actually copying the data when it is
  * safe to do so. The exact circumstances under which a copy will or will not be performed are
  * undocumented and subject to change.
  *
  * <p>This method is safe to use even when {@code sortedMultiset} is a synchronized or concurrent
  * collection that is currently being modified by another thread.
  *
  * @throws NullPointerException if {@code sortedMultiset} or any of its elements is null
  */
 public static <E> ImmutableSortedMultiset<E> copyOfSorted(SortedMultiset<E> sortedMultiset) {
   return copyOfSortedEntries(
       sortedMultiset.comparator(), Lists.newArrayList(sortedMultiset.entrySet()));
 }