Here you can find the source of permutations(List
static <E> List<List<E>> permutations(List<E> list)
//package com.java2s; /*//from w ww . j a v a 2s. c o m * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { static <E> List<List<E>> permutations(List<E> list) { return permutations(new ArrayList<E>(), list, new ArrayList<List<E>>()); } static Object[][] permutations(Object... list) { List<List<Object>> permutations = permutations(Arrays.asList(list)); Object[][] a = new Object[permutations.size()][]; int index = 0; for (List<Object> p : permutations) { a[index] = p.toArray(new Object[p.size()]); index++; } return a; } static <E> List<List<E>> permutations(List<E> prefix, List<E> suffix, List<List<E>> output) { if (suffix.size() == 1) { ArrayList<E> newElement = new ArrayList<>(prefix); newElement.addAll(suffix); output.add(newElement); return output; } for (int i = 0; i < suffix.size(); i++) { List<E> newPrefix = new ArrayList<>(prefix); newPrefix.add(suffix.get(i)); List<E> newSuffix = new ArrayList<>(suffix); newSuffix.remove(i); permutations(newPrefix, newSuffix, output); } return output; } }