The issue here is a little subtle. To make it correct, you'd want:
List<List<String>> myList = new ArrayList<List<String>>();
The definition of myList is asking for a List of Lists of Strings, but you are implementing it as an ArrayList of ArrayLists of Strings, and these don't match. This would becoming an issue if later on you tried something like:
myList.add(new LinkedList<String>());
This is ok by the definition of List of Lists of Strings, but violates the definition of the implementation. LinkedList is a List, but is not an ArrayList.
If you want to enforce that it is an ArrayList of ArrayLists of Strings, then you can use the ArrayList<ArrayList<String>> myList definition, but it's generally better to keep to interfaces.
With my revised code, you can still make it in the implementation an ArrayList of ArrayLists of Strings.
List<List<String>> myList = new ArrayList<List<String>>();
for (int i = 0; i < rowSize; i++)
{
myList.add(new ArrayList<String>());
}
It agrees with the definition of myList as an List of Lists of Strings, but you still reap the benefits of using an ArrayList behind the scenes.
new ArrayList<ArrayList<String>>(), you should have writtennew ArrayList<List<String>>()