# Class PermutationIterator<E>

java.lang.Object
org.apache.commons.collections4.iterators.PermutationIterator<E>

Type Parameters:
  `E` - the type of the objects being permuted

All Implemented Interfaces:
  `Iterator<List<E>>`

public class PermutationIterator<E> extends Object implements Iterator<List<E>>
This iterator creates permutations of an input collection, using the Steinhaus-Johnson-Trotter algorithm (also called plain changes).

The iterator will return exactly n! permutations of the input collection. The `remove()` operation is not supported, and will throw an `UnsupportedOperationException`.

NOTE: in case an empty collection is provided, the iterator will return exactly one empty list as result, as 0! = 1.

Since:
  4.0

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PermutationIterator(Collection<? extends E> collection)`
  Standard constructor for this class.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `hasNext()`
  Indicates if there are more permutation available.
  `List<E>`
  `next()`
  Returns the next permutation of the input collection.
  `void`
  `remove()`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface java.util.Iterator

  `forEachRemaining`

- ## Constructor Details

  - ### PermutationIterator

    public PermutationIterator(Collection<? extends E> collection)
    Standard constructor for this class.
    Parameters:
      `collection` - the collection to generate permutations for
    Throws:
      `NullPointerException` - if coll is null

- ## Method Details

  - ### hasNext

    public boolean hasNext()
    Indicates if there are more permutation available.
    Specified by:
      `hasNext` in interface `Iterator<E>`
    Returns:
      true if there are more permutations, otherwise false

  - ### next

    public List<E> next()
    Returns the next permutation of the input collection.
    Specified by:
      `next` in interface `Iterator<E>`
    Returns:
      a list of the permutator's elements representing a permutation
    Throws:
      `NoSuchElementException` - if there are no more permutations

  - ### remove

    public void remove()
    Specified by:
      `remove` in interface `Iterator<E>`