public static void main(String args[])
{
String[] aData = {"A", "B", "C", "D"};
ArrayList<ArrayList> alOrders = new ArrayList<ArrayList>();
alOrders = getAllOrders(aData, alOrders);
for(ArrayList<ArrayList> alOrder : alOrders) {
System.out.println(Arrays.toString(alOrder));
}
}
/**
* get all order of an array
*/
public static ArrayList<ArrayList> getAllOrders(String aData[], ArrayList<ArrayList> alOrders) {
if(aData.length == 0) {
return alOrders;
}
ArrayList<String> alFirst;
if(alOrders.isEmpty()) {
alFirst = new ArrayList<String>();
alFirst.add(aData[0]);
alOrders.add(alFirst);
} else {
alFirst = alOrders.get(0);
}
int iSize = alFirst.size();
if(iSize == aData.length) {
return alOrders;
}
ArrayList<ArrayList> alNewOrders = new ArrayList<ArrayList>();
for(ArrayList<String> alOrder : alOrders) {
ArrayList<ArrayList> alResult = insertElementByTurns(alOrder, aData[iSize]);
alNewOrders.addAll(alResult);
}
return getAllOrders(aData, alNewOrders);
}
/**
* insert a element to array, at all position
*/
public static ArrayList<ArrayList> insertElementByTurns(ArrayList<String> alBase, String sInsert) {
ArrayList<ArrayList> alResult = new ArrayList<ArrayList>();
for(int i = 0; i <= alBase.size(); i++) {
ArrayList<String> alNew = new ArrayList<String>(alBase);
alNew.add(i, sInsert);
alResult.add(alNew);
}
return alResult;
}