0

我有两个 javaList<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()

也许我做错了,是否有更好的方法或任何可以使用的框架?

4

3 回答 3

0

你能通过调用 result.size() 而不是将大小相乘来得到你想要的吗?

于 2012-07-09T04:05:28.080 回答
0

为了使其更快,您可以为结果提供初始容量,以便不扩展 ArrayList 的内部数组:

int capacity = list1.size() * list2.size();
List<String> result = new ArrayList<String>(capacity);
于 2012-07-09T05:42:32.843 回答
0

稍微难一点但绝对更好的方法是扩展一个不可修改的AbstractCollection(or AbstractList)和相关的迭代器(它将List根据需要在两个迭代器上进行迭代)。这样您就不需要 O(N*M) 存储组合列表。

于 2012-07-09T07:13:46.497 回答