Создать список списков строк в Java

Если я хочу создать список списка строк в Java, например, вот логическое представление (для чего я имею в виду список списков строк), и я нахожу, что второй метод ниже не компилирует pass? Я запутался, так как я считаю, что ArrayList является реализацией интерфейса List, что не так со вторым методом?

Также проконсультируйтесь с экспертом о том, что является правильным способом создания списка списка строк (если я хочу использовать тип интерфейса List для типа переменной, отличного от использования конкретного типа реализации ArrayList)?

  [
    ["hit","hot","dot","dog","cog"],
    ["hit","hot","lot","log","cog"]
  ]

Исходный код в Java,

List<List<String>> arrOfStr = new ArrayList<List<String>>(); // first method works 
List<List<String>> arrOfStr = new ArrayList<ArrayList<String>>(); // second method does not work -- it cannot compile

Edit

Я думаю, что мой вопрос отличается от этого вопроса (Является ли List <Dog> подклассом List <Animal> ? Почему не являются генетическими генериками Java неявно полиморфными?) поскольку я спрашиваю контейнер контейнера, но если я прочитаю его неправильно, пожалуйста, не стесняйтесь меня исправлять.