首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用Java查找笛卡尔积

笛卡尔积是指两个集合的所有可能的组合,即对于集合A和集合B,将集合A中的每个元素与集合B中的每个元素进行配对,得到一个新的集合。

在Java中,可以使用嵌套循环来实现笛卡尔积的计算。以下是一个示例代码:

代码语言:java
复制
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class CartesianProduct {
    public static void main(String[] args) {
        List<List<String>> lists = new ArrayList<>();
        lists.add(Arrays.asList("A", "B", "C"));
        lists.add(Arrays.asList("1", "2", "3"));
        lists.add(Arrays.asList("X", "Y", "Z"));

        List<List<String>> cartesianProduct = getCartesianProduct(lists);
        System.out.println(cartesianProduct);
    }

    public static List<List<String>> getCartesianProduct(List<List<String>> lists) {
        List<List<String>> result = new ArrayList<>();
        if (lists == null || lists.isEmpty()) {
            return result;
        }

        int totalSize = 1;
        for (List<String> list : lists) {
            totalSize *= list.size();
        }

        for (int i = 0; i< totalSize; i++) {
            List<String> combination = new ArrayList<>();
            for (int j = 0; j< lists.size(); j++) {
                int index = (i / getCombinationSize(lists, j)) % lists.get(j).size();
                combination.add(lists.get(j).get(index));
            }
            result.add(combination);
        }

        return result;
    }

    private static int getCombinationSize(List<List<String>> lists, int index) {
        int size = 1;
        for (int i = index + 1; i< lists.size(); i++) {
            size *= lists.get(i).size();
        }
        return size;
    }
}

在上面的示例代码中,我们定义了一个CartesianProduct类,其中包含了一个getCartesianProduct方法,该方法接收一个List<List<String>>类型的参数,表示要计算笛卡尔积的集合列表。该方法返回一个List<List<String>>类型的结果,表示计算出的笛卡尔积。

main方法中,我们创建了一个包含三个元素的集合列表,分别是{"A", "B", "C"}{"1", "2", "3"}{"X", "Y", "Z"},然后调用getCartesianProduct方法计算它们的笛卡尔积,并将结果输出到控制台。

输出结果如下:

代码语言:txt
复制
[
  [A, 1, X],
  [A, 1, Y],
  [A, 1, Z],
  [A, 2, X],
  [A, 2, Y],
  [A, 2, Z],
  [A, 3, X],
  [A, 3, Y],
  [A, 3, Z],
  [B, 1, X],
  [B, 1, Y],
  [B, 1, Z],
  [B, 2, X],
  [B, 2, Y],
  [B, 2, Z],
  [B, 3, X],
  [B, 3, Y],
  [B, 3, Z],
  [C, 1, X],
  [C, 1, Y],
  [C, 1, Z],
  [C, 2, X],
  [C, 2, Y],
  [C, 2, Z],
  [C, 3, X],
  [C, 3, Y],
  [C, 3, Z]
]

可以看到,计算出的笛卡尔积包含了所有可能的组合,共计27个组合。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java实现笛卡尔_Java实现笛卡尔

static Singleton getInstance() { /* * 一开始多线程进来,遇到锁,一个线程进去,是为空,new对象; 后续线程进入,不为空, 不操作;最后直接返回 * 对象不为 /** * 笛卡尔工具类...* * 格式:{ * { 1, 2, 3 }, * { a, b, c, d }, * { A, B, C }, * … * } * * * @return 笛卡尔组合结果 */ public...static List> cross(List> crossArgs) { // 计算出笛卡尔行数 int rows = crossArgs.size() > 0 ?...(); // 生成笛卡尔的每组数据 for (int index = 0; index < record.length; index++) { row.add(crossArgs.get(index.... * * @param sourceArgs 要产生笛卡尔的源数据 * @param record 每行笛卡尔的索引组合 * @param level 索引组合的当前计算层级 */ private

1.2K20
  • java笛卡尔算法_Java 笛卡尔算法的简单实现

    笛卡尔算法的Java实现: (1)循环内,每次只有一列向下移一个单元格,就是CounterIndex指向的那列。...; import java.util.Arrays; import java.util.List; public class DescartesTest { /** * 获取N个集合的笛卡尔 *...) * 对a中的每个元素循环次数=总记录数/(元素个数*后续集合的笛卡尔个数)=12/(3*4)=1次,每个元素每次循环打印次数:后续集合的笛卡尔个数=2*2个 * 对b中的每个元素循环次数...=总记录数/(元素个数*后续集合的笛卡尔个数)=12/(2*2)=3次,每个元素每次循环打印次数:后续集合的笛卡尔个数=2个 * 对c中的每个元素循环次数=总记录数/(元素个数*后续集合的笛卡尔个数...)=12/(2*1)=6次,每个元素每次循环打印次数:后续集合的笛卡尔个数=1个 * * 运行结果: * [[1, 2, 3], [5, 6], [7, 8]] 1,5,7, 1,5,8

    79520

    笛卡尔

    在SQL中,当我们执行多表查询时,会产生一个称为笛卡尔(Cartesian product)的概念,它表示将所有可能的组合都进行连接。...一、笛卡尔的错误示例假设我们有两个表A和B,它们的数据如下:表A:idname1Alice2Bob表B:idage120230如果我们想要查询表A和表B中的所有数据,可以使用如下语句:SELECT *...FROM A, B;执行结果如下:idnameidage1Alice1201Alice2302Bob1202Bob230我们可以看到,这个查询返回了所有可能的组合,即产生了笛卡尔。...因此,在进行多表查询时,我们应该避免使用笛卡尔。二、正确的多表查询方法为了避免笛卡尔的错误,我们需要使用JOIN语句来连接多个表,并指定连接条件。...与笛卡尔不同的是,使用INNER JOIN连接表时,只返回符合连接条件的行,避免了冗余数据的产生。除了INNER JOIN之外,还有其他类型的JOIN操作可以使用。

    48540

    额,关于笛卡尔CartesianProduct

    笛卡尔会产生shuffle吗? 有关窄依赖解惑 最后送一道面试题 1、笛卡尔会产生shuffle吗?...结论是:不会 如果从网上搜的话,排在前几的答案,基本都是这样: 但是仔细分析笛卡尔源码,就会发现,它的运行原理是这样的: select tmp1.a,tmp2.b from testdata2 tmp1...assertnotnull(input[0, org.apache.spark.sql.test.SQLTestData$TestData2, true])).b AS b#12] +- Scan[obj#10] 笛卡尔的分片方法...: getDependencies方法: 整个过程在map端执行,没有shuffle 2、有关窄依赖 这个如果在百度上搜相关内容,大部分都这么定义: 如果这样理解的话,就会很矛盾,笛卡尔的依赖中...不一定,下面这些情况下join不会产生shuffle 笛卡尔 BroadcastHashJoin BroadcastNestedLoopJoin 使用相同的分区器进行一次分区然后再去join,这时join

    54320

    工作总结之因为笛卡尔问题写SQL搞了半天(附笛卡尔总结)

    解决过程 尝试过左连接,右连接及内连接等等,发现数据始终比实际数据多出很多,查阅资料判断是产生了笛卡尔,下文有详细的笛卡尔解释 根据指引选择where 进行多条件限制仍然不行????。...为了笛卡尔问题花了3个多小时[害] 总结教训下次先观察两张表的字段再改SQL!...比如简单两个表连接学生表(Student)和班级(Class)表,如图: 进行连接后如图: 笛卡尔 笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。...所有连接方式都会先生成临时笛卡尔表,笛卡尔是关系代数里的一个概念,表示两个表中的每一行数据任意组合,上图中两个表连接即为笛卡尔(交叉连接) 在实际应用中,笛卡尔本身大多没有什么实际用处,只有在两个表连接时加上限制条件...现在,我的问题是,如何查找CareySon的经理的姓名?

    1.5K10
    领券