i have task - need to get all combinations of elements in multi-dimensional, different size list`s.
When i put sb initialize in (1) place - i have Error: "Exception in thread "main" java.lang.OutOfMemoryError: Java heap space"
when i put it in (2) - it works faster and without errors.
And i can`t understand why??
public class Combine {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<Integer>();
for (int i = 0; i < 140; i++) {
list1.add(i);
}
List<Integer> list2 = new ArrayList<Integer>();
for (int i = 200; i < 350; i++) {
list2.add(i);
}
List<Integer> list3 = new ArrayList<Integer>();
for (int i = 300; i < 350; i++) {
list3.add(i);
}
List<List> list = new ArrayList<List>();
list.add(list1);
list.add(list2);
list.add(list3);
long startTime = System.currentTimeMillis();
System.out.println(doCombine(list).size());
long stopTime = System.currentTimeMillis();
System.out.println(stopTime - startTime);
}
public static List<String> doCombine(List<List> list) {
List<String> tempList = new ArrayList<String>();
List<String> resultList = new ArrayList<String>();
for (int i = 0; i < list.get(0).size(); i++) {
resultList.add(String.valueOf(list.get(0).get(i)));
}
StringBuilder sb;
for (int i = 1; i < list.size(); i++) {
for (String tempItem : resultList) {
(1) sb = new StringBuilder(tempItem);
for (int j = 0; j < list.get(i).size(); j++) {
(2) sb = new StringBuilder(tempItem);
tempList.add(String.valueOf(sb.append(":").append(list.get(i).get(j))));
}
}
resultList = tempList;
tempList = new ArrayList<String>();
}
return resultList;
}
}