用java实现笛卡尔积_Java实现笛卡尔积
大家好,又见面了,我是你们的朋友全栈君。
public class Singleton { private static Singleton intance; private Singleton() {} public static Singleton getInstance() { /* * 一开始多线程进来,遇到锁,一个线程进去,是为空,new对象; 后续线程进入,不为空, 不操作;最后直接返回 * 对象不为
/**
* 笛卡尔积工具类.
*
*
*
*
* @author 啸白腥
* @since Rev
*
*/
public class CrossUtils {
// ~ Static Fields
// ==========================================================================
// ~ Fields
// ==========================================================================
// ~ Constructors
// ==========================================================================
// ~ Methods
// ==========================================================================
/**
* 产生笛卡尔积组合.
*
* @param crossArgs 信息组合。
*
* 格式:{
* { 1, 2, 3 },
* { a, b, c, d },
* { A, B, C },
* …
* }
*
*
* @return 笛卡尔积组合结果
*/
public static List> cross(List> crossArgs) {
// 计算出笛卡尔积行数
int rows = crossArgs.size() > 0 ? 1 : 0;
for (List data : crossArgs) {
rows *= data.size();
}
// 笛卡尔积索引记录
int[] record = new int[crossArgs.size()];
List> results = new ArrayList>();
// 产生笛卡尔积
for (int i = 0; i < rows; i++) {
List row = new ArrayList();
// 生成笛卡尔积的每组数据
for (int index = 0; index < record.length; index++) {
row.add(crossArgs.get(index).get(record[index]));
}
results.add(row);
crossRecord(crossArgs, record, crossArgs.size() – 1);
}
return results;
}
/**
* 产生笛卡尔积当前行索引记录.
*
* @param sourceArgs 要产生笛卡尔积的源数据
* @param record 每行笛卡尔积的索引组合
* @param level 索引组合的当前计算层级
*/
private static void crossRecord(List> sourceArgs, int[] record, int level) {
record[level] = record[level] + 1;
if (record[level] >= sourceArgs.get(level).size() && level > 0) {
record[level] = 0;
crossRecord(sourceArgs, record, level – 1);
}
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157620.html原文链接:https://javaforall.cn
相关文章
- java queue toarray_Java PriorityBlockingQueue toArray()用法及代码示例
- java逻辑删除代码_MybatisPlus实现逻辑删除功能
- java编译命令是什么_Java编译命令整理
- java反转数组_Java实现数组反转翻转的方法实例
- java 登录 qq_Java实现QQ登录
- java实现编译器_实现一个简单的编译器
- java中static关键字的作用_Java:Java中static关键字作用
- eclipse创建一个java项目目录_Eclipse创建JAVA项目
- java笛卡尔积算法_Java 笛卡尔积算法的简单实现
- JAVA数据库连接池_java与数据库的连接怎么实现
- Java入门代码_java编程自学网
- 编程实现从键盘输入一个字符串输出这个字符串的长度_java获取字符串字节数
- 用递归实现数组求和的函数_JAVA数组递归排序
- Java中的锁的使用和实现介绍
- Java实现简单的数据库连接池代码详解编程语言
- 实现使用Java代码实现MySQL数据库连接(java连接mysql数据库代码)
- MySQL封装之Java实现(mysql封装java)
- Java 连接 Redis:实现数据快速传输(java连redis)
- 机制实现Java中Redis过期机制(redisjava过期)
- key处理Java操作Redis管理过期Key实现缓存持久化(redisjava过期)
- 使用Java远程控制Linux 实现简单、高效的服务器管理(java控制linux)
- 实现Java实现Redis入门指南(redis入门Java)
- Java操作Redis实现数据快速存取(java访问redis)
- 实现高并发:Java利用Redis秒杀成功(java秒杀redis)
- MySQL之Java实现主从复制(java mysql主从)
- 管理Linux下Java版本管理:轻松实现多版本切换(linux下java版本)
- 秘籍学习实现纯Java版Redis(纯java版redis)
- 实现Java认证让你离Oracle更近一步(java认证oracle)
- java实现单链表中是否有环的方法详解
- Java编程思想里的泛型实现一个堆栈类分享