code: public List<T> nextCombinationAsList(List<T> destination)
      {
          generateNextCombinationIndices();
          // Generate actual combination.
          destination.clear();
          for (int i : combinationIndices)
          {
              destination.add(elements[i]);
          }
          return destination;
      }
docs: Generate the next combination and return a list containing
  the appropriate elements.  This overloaded method allows the caller
  to provide a list that will be used and returned.
  The purpose of this is to improve performance when iterating over
  combinations.  If the {@link #nextCombinationAsList()} method is
  used it will create a new list every time.  When iterating over
  combinations this will result in lots of short-lived objects that
  have to be garbage collected.  This method allows a single list
  instance to be reused in such circumstances.
  @param destination Provides a list to use to create the
  combination.
  @return The provided list now containing the elements of the combination.