【发布时间】:2014-11-07 07:53:00
【问题描述】:
我正在尝试编写一个函数来置换一个通用列表,但是发生了一些非常奇怪的事情。如果我用数组替换所有列表,则以下代码结构有效,但因为它是代码,所以只需打印出 [1, 2, 3] 六次。为什么是这样?我认为这与按值传递与按引用传递有关。
//Main.java
import java.util.ArrayList;
import java.util.Set;
import java.util.List;
public class Main {
public static void main (String ... args) {
ArrayList<Integer> AL = new ArrayList<Integer>();
AL.add(1);
AL.add(2);
AL.add(3);
Permute<Integer> perm = new Permute<Integer>();
Set<List<Integer>> set = perm.listPermutations(AL);
for (List<Integer> lst : set) {
System.out.println(lst);
}
}
}
//Permute.java
import java.util.List;
import java.util.Set;
import java.util.HashSet;
public class Permute<E> {
public Set<List<E>> listPermutations(List<E> lst) {
Set<List<E>> perms = new HashSet<List<E>>();
permute(lst, 0, perms);
return perms;
}
private void permute(List<E> lst, int start, Set<List<E>> perms) {
if (start >= lst.size()) {
// nothing left to permute
perms.add(lst);
}
for (int i = start; i < lst.size(); i++) {
// swap elements at locations start and i
swap(lst, start, i);
permute(lst, start + 1, perms);
swap(lst, start, i);
}
}
private void swap(List<E> lst, int x, int y) {
E temp = lst.get(x);
lst.set(x, lst.get(y));
lst.set(y, temp);
}
}
【问题讨论】:
标签: java generics pass-by-reference permutation pass-by-value