Согласно javadoc , когда вы пишете
ArrayList<Integer[]> nums = new ArrayList<Integer[]>(size);
Вы не определяете размер из чисел , вы 'повторное определение начальной емкости - в этом смысле ArrayLists не похожи на встроенные массивы ( value1 и value2 в вашем коде).
Вы можете попробовать это сами: выведите размер nums после каждой строки (код очищен для исключения IndexOutOfBoundsException.
int size = 2:
ArrayList<Integer[]> nums = new ArrayList<Integer[]>(size);
Integer[] value1 = {1,2,3};
Integer[] value2 = {1,2};
System.out.println(nums.size());
nums.add(value2);
System.out.println(nums.size());
nums.add(value1);
System.out.println(nums.size());
При этом будет напечатано:
0
1
2