Qual a diferença e arraylist para list?
Qual a diferença e arraylist para list?
List é a interface e ArrayList a implementação. Você não consegue, por exemplo, fazer:
List lista = new List();
Mas por outro lado pode fazer:
ArrayList lista = new ArrayList();
List é uma maneira de declarar uma lista genérica, a arrayList vai especificar alguns termos de sua interface na sua aplicação, por exemplo:
List passagem = new ArrayList();
Resumindo, você acessará apenas aos métodos da interface List, que ArrayList implementa, sendo que List não implementa nenhum método.
Qualquer dúvida a mais, você pode acessar esse link: https://permita.me/?q=diference+between+list+arraylist+java
A classe ArrayList é uma implementação da interface List que utiliza um vetor para armazenar elementos. Uma vez que vetores tem tamanho fixo em Java, a classe ArrayList se encarrega de criar um novo vetor (internamente) com um tamanho maior e copiar seus elementos correntes para esse novo vetor sempre que for necessário.
O vetor interno da classe ArrayList é recriado quando há remoções de elemento, adições de elemento no fim da lista além da capacidade dimensionada e adições de elementos que não no final da lista.
Como a operação de recriação do vetor é custosa, busque dimensionar previamente o tamanho da lista, para tal, utilize o construtor sobrecarregado ArrayList(int) enviando como argumento a capacidade inicial da lista. A capacidade inicial padrão de um objeto ArrayList é de 10 elementos.
Cara, List é uma interface, ela define um contrato e todas as outras classes que "assinam" esse contrato devem implementar os métodos que a interface List define. ArrayList assim como outras classes, como por exemplo, LinkedList, Vector e outras, implementam a interface List, o beneficio disso é que você ganha em polimorfismo ou seja, você pode referenciar um objeto mais especifico através de uma interface mais genérica. O mais indicado é que quando você for utilizar qualquer uma das classes que implementam a interface List, você utilize o tipo como List.
Assim sendo, você pode fazer:
List<String> nomesArrayList = new ArrayList<String>();
List<String> nomesLinkedList = new LinkedList<String>();
List<String> nomesVector = new Vector<String>();
Vantagem disso? quando você precisar de um método que receba uma Lista de nomes, você pode fazer algo do tipo:
public void imprimeNomes(List<String> lista) {
lista.forEach(nome -> System.out.println(nome));
}
Veja que no método recebe simplismente List<String>
, ou seja, você pode passar qualquer uma das três listas criadas acima. Isso é polimorfismo!