阅读量:71
在Java中,实现笛卡尔积的迭代方式有以下几种:
- 使用多重循环:最简单的方式是使用多重循环来实现笛卡尔积。每个循环对应一个集合,通过嵌套循环的方式遍历每个集合的元素,从而得到笛卡尔积。
List> sets = Arrays.asList(
Arrays.asList(1, 2),
Arrays.asList(3, 4),
Arrays.asList(5, 6)
);
List> result = new ArrayList<>();
result.add(new ArrayList<>());
for (List set : sets) {
List> newResult = new ArrayList<>();
for (List list : result) {
for (Integer integer : set) {
List newList = new ArrayList<>(list);
newList.add(integer);
newResult.add(newList);
}
}
result = newResult;
}
for (List list : result) {
System.out.println(list);
}
- 使用递归:可以使用递归的方式来实现笛卡尔积。递归函数的参数可以包括当前集合的索引和已经生成的笛卡尔积列表。
public static List> cartesianProduct(List> sets, int index)
{
List> result = new ArrayList<>();
if (index == sets.size()) {
result.add(new ArrayList<>());
} else {
for (Integer integer : sets.get(index)) {
for (List list : cartesianProduct(sets, index + 1)) {
List newList = new ArrayList<>(list);
newList.add(integer);
result.add(newList);
}
}
}
return result;
}
List> sets = Arrays.asList(
Arrays.asList(1, 2),
Arrays.asList(3, 4),
Arrays.asList(5, 6)
);
List> result = cartesianProduct(sets, 0);
for (List list : result) {
System.out.println(list);
}
以上是两种常见的实现笛卡尔积的迭代方式,可以根据实际情况选择合适的方式来实现。