【发布时间】:2018-08-07 04:29:38
【问题描述】:
我是 Java 和 Stack Overflow 的新手,我有一个关于排列的问题。
方法:我使用ArrayList 中的对象生成ArrayList。每个ArrayList 的大小从1(最小1 可能)到infinite,并包含具有唯一名称属性的自定义生成对象。
问题: 现在我的问题是如何获得从第一个 ArrayList 到最后一个ArrayList 的所有可能对象组合的排列(我想我们可以说这是 x-轴)在我的外部ArrayList(y 轴)内?
示例: 我试着画一个简单的例子:
-
ArrayList: 1.1 | 1.2 | 1.3 -
ArrayList:2.1 -
ArrayList: 3.1 | 3.2
这里这些ArrayLists 在外部ArrayList 中(因为未知数量的可能ArrayLists 带有对象)。第二个数字是显示不同的对象。假设“让所有可能的组合从上到下”。
结果: 我想得到一个看起来像这样的结果:
- 组合:1.1 | 2.1 | 3.1
- 组合:1.1 | 2.1 | 3.2
- 组合:1.2 | 2.1 | 3.1
- 组合:1.2 | 2.1 | 3.2
- 组合:1.3 | 2.1 | 3.1
- 组合:1.3 | 2.1 | 3.2
编辑:这里是分隔符“|”代表例如ArrayList 中的一个槽。这些组合不应该写在控制台中,因为我需要单独访问排列的每个对象。
最好的情况是如果我可以一个接一个地获得每个组合,因为我想检查每个组合的几个条件,并且只在进一步的 ArrayList 或 .txt 文件中保护某些组合。
到目前为止我得到了什么:
我找到了一个代码 sn-p,它在 ArrayList 内将 ArrayLists 与 Strings 置换,并返回一个 ArrayList 与组合的 Strings。
public static ArrayList<String> combineAllCases(ArrayList<ArrayList<String>> totalList)
{
ArrayList<String> result = new ArrayList<String>(totalList.get(0));
for(int index = 1; index < totalList.size() ; index++)
{
result = (ArrayList<String>) combineTwoLists(result, totalList.get(index));
}
return result;
}
和
private static ArrayList<String> combineTwoLists(ArrayList<String> list1, ArrayList<String> list2)
{
ArrayList<String> result = new ArrayList<String>();
StringBuilder sb = new StringBuilder();
for(String s1 : list1)
{
for(String s2: list2)
{
sb.setLength(0);
sb.append(s1).append("#").append(s2);
result.add(sb.toString());
}
}
return result;
}
想法:
使用这种方法,我可以使用 String 拆分来获取每个组合的每个对象名称,并且可以搜索旧的 ArrayLists 这个名称来取回对象。
问题:
此方法仅适用于ArrayList 中的少数ArrayLists(例如,如上面的示例)。如果有例如16 个ArrayLists 在外部ArrayList 中的大小为7,我得到"MemoryOutOfSpace" 的错误。
如前所述,最好的情况是在组合后获得组合,并单独决定是否要保留组合(我想我会将每个组合保存在 .txt 文件中,因为它可能是我想要的保留每一个组合 --> 绕过另一个"MemoryOutOfSpace"-Error 的问题。
简短摘要:
内部-ArrayLists 带有对象(大小从 1 到未知大小)。
外部-ArrayList 和内部-ArrayLists(大小未知)。
想要的输出:从上到下的所有对象组合。
提前致谢。
【问题讨论】:
标签: java object arraylist permutation