su di un vettore. Puoi fare le permutazioni sugli indici e poi stampare il contenuto dell'indice
codice:
public class Permutazioni
{
    public static void generaPermutazioni(int[] B, int estremoinferiore)
    {   int temp;
	// stampa permutazione attuale
	if (estremoinferiore==B.length-1) {
	for (int j=0; j<B.length; j++) System.out.print(B[j]+" ");
	System.out.println();
    }
	for (int i=estremoinferiore; i<B.length; i++)
	  {temp = B[estremoinferiore];
	   B[estremoinferiore] = B[i];
	   B[i] = temp;
	   generaPermutazioni(B, estremoinferiore+1);
	   temp = B[estremoinferiore];
	   B[estremoinferiore] = B[i];
	   B[i] = temp;
	}
    }
   
    public static void main()
    { int[] A = {4,3,2,1};
      generaPermutazioni(A,0);
}
}

questo lo fa su di una stringa
codice:
public class Permutazioni {

  // stampa su un PrintStream tutte le permutazioni della stringa s
  public static void permutazioni(String s, PrintStream ps) {
    permutazioni("", s, ps);
  }

  private static void permutazioni(String fissa, String permuta,
                                   PrintStream ps) {
    if (permuta.length() == 0)
      ps.println(fissa);
    else
      for (int i = 0; i < permuta.length(); i++)
        permutazioni(fissa + permuta.charAt(i),
                     permuta.substring(0,i) + permuta.substring(i+1),
                     ps);
  }
}