【发布时间】:2012-07-09 03:03:47
【问题描述】:
我有两个 java List<String> 对象,我需要在第三个 List<String> 结果对象中添加前两个对象的所有可能组合。喜欢:
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,并使用相同的代码进行迭代。如果重复不常见,此方法将比当前方法稍差。如果要查找所有组合,则必须花费至少与唯一组合数量一样多的时间复杂度。 -
在这种情况下没有重复。
-
我认为这种方法是最直接的。如果 2 列表中没有重复项,那么唯一可以做的就是避免重新计算相同的组合。不过,我无论如何也想不出来。
-
那就用一套吧! Set
allValues=new HashSet (list1); allValues.addAll(list2); -
我不能,因为我需要在两个值之间进行连接。例如,如果 value1(属于 list1)是“one”并且 value2(属于 list2)是“two”,则结果对象应该是:“onetwo”。
标签: java performance list nested