`
liyan0524
  • 浏览: 89035 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用笛卡尔积java对List进行排列组合

    博客分类:
  • JAVA
阅读更多

public class Test1 {

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void main(String[] args) {

		ArrayList l1 = new ArrayList();
		l1.add(1);
		l1.add(2);
		l1.add(3);
		ArrayList l2 = new ArrayList();
		l2.add("a");
		l2.add("b");

		ArrayList l3 = new ArrayList();
		l3.add("+");
		l3.add("-");

		ArrayList ls = new ArrayList();
		ls.add(l1);
		ls.add(l2);
		ls.add(l3);
		List list = Dikaerji0(ls);
		System.out.println(list.size());
		for (Object object : list) {
			System.out.println(object);
		}

	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static ArrayList Dikaerji0(ArrayList al0) {

		ArrayList a0 = (ArrayList) al0.get(0);// l1
		ArrayList result = new ArrayList();// 组合的结果
		for (int i = 1; i < al0.size(); i++) {
			ArrayList a1 = (ArrayList) al0.get(i);
			ArrayList temp = new ArrayList();
			// 每次先计算两个集合的笛卡尔积,然后用其结果再与下一个计算
			for (int j = 0; j < a0.size(); j++) {
				for (int k = 0; k < a1.size(); k++) {
					ArrayList cut = new ArrayList();

					if (a0.get(j) instanceof ArrayList) {
						cut.addAll((ArrayList) a0.get(j));
					} else {
						cut.add(a0.get(j));
					}
					if (a1.get(k) instanceof ArrayList) {
						cut.addAll((ArrayList) a1.get(k));
					} else {
						cut.add(a1.get(k));
					}
					temp.add(cut);
				}
			}
			a0 = temp;
			if (i == al0.size() - 1) {
				result = temp;
			}
		}
		return result;
	}
}
 
分享到:
评论

相关推荐

    从n个数组中取出所有排列组合(Java实现)

    在实际应用中,可能需要对结果进行优化,例如使用Set避免重复,或者使用Stream API来简化代码。此外,对于大数据量的输入,还需要考虑性能优化,如使用并行计算或记忆化搜索等技术。 总结来说,从n个数组中取出所有...

    Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例

    说明:本人前段时间遇到的求n个数组的所有排列组合的问题,发现笛卡尔积算法可以解决,但是网上搜索的只有Java版本的实现,于是自己试着用python实现,由于新手代码不太规范。 代码:本人封装了一个类Cartesian...

    java 和 c# 不同的7个方法 实现 ABCD 全排列

    在Java中,可以使用`ArrayList`配合`Collections.swap()`,C#中可使用`List&lt;T&gt;`配合`Swap()`方法。 4. **位运算**: 利用位运算,我们可以创建一个二进制数,每一位代表一个字符是否被选中。通过遍历所有可能的二...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...

    2021-2022计算机二级等级考试试题及答案No.12396.docx

    4. 关系运算的时间复杂度:在关系运算中,笛卡尔积(D.)通常是最耗时的操作,因为它涉及所有记录的组合。 5. 列表框引用:引用列表框的最后一项,应使用 List1.List(List1.ListCount-1),因为ListCount表示列表框...

    2021-2022计算机二级等级考试试题及答案No.16973.docx

    6. 集合运算:在数据库理论中,基本的集合运算是并集(Union)、交集(Intersection)、差集(Difference)以及笛卡尔积(Cartesian Product)。 7. List和Set接口:Collection接口的两个主要子接口是List和Set。...

    2021-2022计算机二级等级考试试题及答案No.19361.docx

    例如,在Windows的“我的电脑”中,用户可以通过“查看”菜单下的“排列图标”命令来按照不同的标准(如名称、大小、日期等)对文件进行排序。 ### 12. 计算机硬件识别的语言 - **知识点解析**:计算机硬件可以...

    2021-2022计算机二级等级考试试题及答案No.3569.docx

    - **解析**: 条件连接是在两个关系的笛卡尔积基础上,根据一定的条件筛选出符合条件的元组。 #### 7. Visual FoxPro中的EXIT语句 - **知识点**: Visual FoxPro是一种关系型数据库管理系统,支持多种控制流程语句。...

Global site tag (gtag.js) - Google Analytics