Bom dia a todos! Estou tendo um pouco de dificuldade de visualizar e aprender sobre o ArrayList.Alguém poderia me explicar com exemplos práticos dentre outras coisas , por favor!
lembrando que sei que é necessário fazer isto:
Chamada do construtor da classe ArrayList
ArrayList passagem = new ArrayList();
para adicionar um objeto no ArrayList tem que fazer isto , certo?
passagem.add(new classe());
para retornar o valor tenho que fazer um casting visto que o retorno é um objeto , certo?
Nesta parte não estou consiguindo desenrolar…
Abraços a todos e obrigado pela ajuda…
OBs2: Vi um código que era mais ou menos assim
List passagem = new ArrayList();
Qual a diferença de usar este código e o outro?
Muitas perguntas em estrutudas de dados… hhe abraços!
Você precisa fazer o casting apenas se não declarar o tipo da classe que terá no array
ArrayList<String> passagem = new ArrayList<String>();
Desta forma não necessita de casting, pois vc já está informando que será preenchido apenas com classe String
List passagem = new ArrayList();
Basicamente vc tera terá acesso apenas aos métodos da interface List, que ArrayList implementa. Caso vc quisesse utilizar um método que ArrayList possui mas que não existe na interface List vc teria que fazer um casting
List lista = new ArrayList();
lista.add(new Carro());
lista.add(new Moto());
for(int i = 0; i < lista.size(); i++ ){
// a conversão é necessária na hora em que for usar o objeto do ArrayList
lista.get(i).empinaMoto(); // erro, é um Object até que seja convertido
Moto moto = (Moto) lista.get(i); // erro, dependendo do objeto que virá
if(lista.get(i) instanceof Moto ){ // Operador instanceof verifica se o objeto É-UM tipo Moto
Moto moto = (Moto) lista.get(i); // faz a conversão segura
moto.empinaMoto(); //chama o método da classe moto
}
if(lista.get(i) instanceof Carro ){
Carro carro = (Carro) lista.get(i);
carro.abrePortaMalas();
}
}
O importante é lembrar que independente do que você colocar no ArrayList() (Carro, Moto, String, Integer) quando você realmente for usar o objeto ele será um Object, então para ter o comportamento especifico da sua classe é preciso converter.
A partir do Java 5 é possivel fazer assim:
ArrayList<Carro> lista = new ArrayList<Carro>();
lista.add(new Carro()); // só é possível adicionar Carro ao ArrayList
Carro carro = lista.get(0); // a conversão não é necessária
List é uma interface
ArrayList é um implementador dessa interface, ou seja, é um tipo de List
Java 5 trouxe uma solução para esse Cating obrigatório… depois vc pode dar uma olhada…
mas vamos lá…
import java.util.ArrayList;
/**
*
* @author aohana
*/
public class ArrayListPessoal {
static ArrayList aList = new ArrayList();
public static void main(String[] args) {
adicionaLista();
imprimeLista();
}
static void adicionaLista(){
Integer a = new Integer(0);
Double b = new Double(1.0);
Boolean c = new Boolean(true);
aList.add(a);
aList.add(b);
aList.add(c);
}
static void imprimeLista() {
for(int i = 0; i<aList.size(); i++){
System.out.println(aList.get(i));
}
}
}
testa isso aí e vê o que acontece…
No segundo caso, vc está se beneficiando do Polimorfismo… List é a Interface que é implementada por todas as coleções que são AlgumaCoisaList
crie uma referência do tipo List e vc poderá receber um objeto de Qualquer classe que implemente List… crie uma referência do tipo ArrayList e vc só vai poder receber um ArrayList…
Muitissimo obrigado por toda a ajuda que vocês me deram.Estarei estudando mais estrutura de dados visto que estou com um pouco de dificuldade nesta parte.
Cara esta comunidade é muito boa, obrigado a todos…