我有两个java List<String>
对象,我需要在第三个List<String>
结果对象中添加前两个的所有可能组合。像:Java,如何在列表上正确实现嵌套迭代器?
List<String> list1 = getList1();
List<String> list2 = getList2();
List<String> result = new ArrayList<String>();
for(String value1 : list1) {
for(String value2 : list2) {
result.add(value1 + value2);
}
}
的问题是,当列表增长这个快速和肮脏的功能变得缓慢呈指数:
long combinations = list1.size() * list2.size()
也许我做错了,有没有更好的方法把它或任何可以使用的框架?
如果列表中有许多重复项,您可能会做得更好。只需将每个'List'中的所有元素插入'Set',并使用相同的代码进行迭代。如果重复不常见,此方法会比当前方法稍差。如果您想查找所有组合,则必须至少花费与独特组合数量一样多的时间复杂度。 – nhahtdh 2012-07-09 03:09:45
在这种情况下没有重复。 – Mark 2012-07-09 03:12:41
我认为这种方法是最直接的。如果2列表中没有重复,则唯一可以做的是避免重新计算相同的组合。不过,尽管如此,我还是无法想到这么做。 – nhahtdh 2012-07-09 03:27:51