E il casting (ArrayList) perché si fa, se l'elemento 0 di matrice è già un ArrayList (al momento vuoto)?
Essendo la lista non parametrizzata, tratta solo Object, il get restituisce Object. E Object non ha ovviamente il add(). Quindi devi per forza mettere un cast per "rivedere" l'oggetto come ArrayList.