我有两个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()
也许我做错了,是否有更好的方法或任何可以使用的框架?
答案 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)存储。