Похоже, вы не до конца понимаете разницу между массивом и списком массивов.
Массив - это контейнерный объект, который содержит фиксированное количество значений одного типа. Длина массива устанавливается при его создании. После создания его длина фиксируется. Таким образом, вы должны знать размер, прежде чем создавать его, или вы должны создать его достаточного размера.
С другой стороны, ArrayList - это коллекция (сложный тип, см. в этом руководстве для получения дополнительной информации), которая может содержать простые объекты, коллекции, ... ArrayList можно представить себе как динамический массив - вам не нужно знать начальный размер, он автоматически изменяется при добавлении или удалении из него элементов.
Хорошая привычка перебирать ArrayList вот так
List<String> names = new ArrayList<String>();
// add something
// foreach loop
for (String name : names) {
// here you have access directly to the value
// and you don't have to write list.get(index)
System.out.println(name);
}
Теперь к вам вопрос. Если вы прочитаете ссылку выше, вы сможете создать ее самостоятельно. Но если вы все еще не знаете:
List<List<String>> twoDimensionList = new ArrayList<List<String>>();
Итерация с циклом foreach
for (List<String> innerList : twoDimensionList) {
for (String value : innerList) {
...
}
}