Java,如何在Lists上正确实现嵌套迭代器?

时间:2012-07-09 03:03:48

标签: java performance list nested

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

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

int capacity = list1.size() * list2.size();
List<String> result = new ArrayList<String>(capacity);

答案 2 :(得分:0)

稍微更难但绝对更好的方法是扩展unmodifiable AbstractCollection (or AbstractList)和相关的迭代器(根据需要迭代两个List迭代器)。这样,组合列表就不需要O(N * M)存储。