我正在尝试编写一个返回一个大ArrayList<ArrayList<String>>
的方法,该方法包含较小的ArrayLists,每个ArrayLists都有一个不同的起始ArrayList排列。
这是我的方法:
public static ArrayList<ArrayList<String>> permute(ArrayList<String> x) {
ArrayList<ArrayList<String>> res = new ArrayList<ArrayList<String>>();
while (res.size() < fac(x.size())) { //fac method works fine
Collections.shuffle(x);
if (!res.containsAll(x)) {
res.add(x);
}
}
return res;
}
我的方法是基本上重新调整原始的ArrayList,x,并检查它是否已经在结果ArrayList中,如果不是,那么我添加它。出于某种原因,当我尝试这个方法时,结果ArrayList包含相同的ArrayLists,即使我有一个if语句,这是特定的,所以不会发生。
我错过了什么?
答案 0 :(得分:6)
您的算法存在三个问题:
x = new ArrayList(x)
。contains
,而不是containsAll
;否则你要检查是否包含1/n!
(对于n
元素),所以这将花费非常非常长的时间。答案 1 :(得分:0)
res.containsAll(x)
如果String
中存在x中res
类型的所有元素,则会出现这种情况。但res
的元素是ArrayList<String>
。你可能想要:
res.contains(x)
如果在{res。
中存在ArrayList<String>
的x,则为真