Só para reforçar:
Quando você quer passar uma coleção por parâmetros para um método, sempre use a classe mãe, a classe abstrata, dessa coleção. O que isso quer dizer?
Suponhamos que eu tenha o seguinte método:
public void manipularLista(ArrayList<MinhaClasse> lista)
{
//...
}
Como meu parâmetro é um ArrayList, ele só vai aceitar ArrayLists ou filhos dela!
List<MinhaClasse> lista;
lista = new ArrayList<MinhaClasse>();
manipularLista(lista); // OK!
lista = new LinkedList<MinhaClasse>();
manipularLista(lista); // ERRO! Porquê? LinkedList não é uma ArrayList nem filha dela!!
Agora, se eu fizer o meu método assim…
public void manipularLista(List<MinhaClasse> lista)
{
//...
}
… estou dizendo que ele aceita qualquer List e filhas dela, ou seja, torna-se um método mais genérico.
List<MinhaClasse> lista;
lista = new ArrayList<MinhaClasse>();
manipularLista(lista); // OK!
lista = new LinkedList<MinhaClasse>();
manipularLista(lista); // Agora sim, OK! LinkedList é filha de List, e o método aceita ela!
Abraços!