Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Diferença entre List e ArrayList

Qual a diferença e qual melhor forma de declarar uma Lista e por que ?

List<String> lista = new ArrayList<String>();

OU

ArrayList<String> lista = new ArrayList<String>();

3 respostas
solução!

Oi Alex, tudo bem?

É considerada boa prática declarar da primeira forma.

List<String> lista = new ArrayList<String>();

A razão para isso é que usando a interface (List) ao invés de uma implementação específica (ArrayList) na hora de declarar o tipo da lista, permite que você mude, futuramente, o tipo de implementação da lista com muita facilidade (ArrayList para LinkedList, por exemplo).

Quando você declara a lista dessa forma:

ArrayList<String> lista = new ArrayList<String>();

Você faz com que o código fique muito acoplado/preso a um tipo específico de implementação (ArrayList), e caso você se arrependa um dia de ter usado o tipo ArrayList e queira mudar para uma LinkedList (ou vice-versa), fazer essa mudança pode te dar uma dor de cabeça já que em um sistema maior, nada garante que outras partes do código não estejam usando métodos específicos do ArrayList. Por outra lado, se desde o começo você tivesse implementado a interface List, bastaria mudar uma instancia dela:

List<String> lista = new ArrayList<String>();

se torna

List<String> lista = new LinkedList<String>();

sem dor de cabeça, sem quebrar nenhum código já implementado só por mudar detalhes da implementação, e ainda por cima, respeitando o princípio de encapsulamento da Orientação a Objetos.

Esse assunto será abordado novamente durante o curso de Java: Dominando as Collections.

Espero ter ajudado. Se tiver qualquer ponto que ainda não ficou muito claro é só avisar!

Bons estudos!

Fala, Alex, boa tarde! Segundo o curso de Java Collections, a melhor forma de você se referenciar à uma lista é com a sua primeira opção:

List<String> lista = new ArrayList<String>();

Caso, futuramente, em algum projeto seu, você queira não mais utilizar o ArrayList e sim uma LinkedList, a variável de referência mais genérica, que é a List, te permitirá referenciar a LinkedList sem grandes problemas.

Já a diferença é que List é uma interface e ArrayList é uma classe que implementa List. ArrayList vai implementar os métodos de List e pode ter métodos mais específicos que List não vai ter, aí você escolhe o que melhor se aplica a sua necessidade. Caso você ainda não tenha decido uma lista específica, use List.

Espero ter ajudado,

Abraços!!

Obrigado Thiago Yuji Enjo e Rafael Lima Barbosa.

Sanou minhas duvidas.