Documente Academic
Documente Profesional
Documente Cultură
/**
* @param args
*/
public static void main(String[] args) {
/*
* Declaremos nosso objeto sem nenhuma instncia
*
* */
List carros;
/*
* Criamos uma instncia qualquer para o nosso objeto
* do tipo List, sendo que essa instncia deve
* obrigatoriamente implementar a interface List.
* Veja as possibilidades
* */
carros = new ArrayList();
carros = new LinkedList();
}
Ento voc pode questionar: Porque no fazer um ArrayList carros =
new ArrayList(); sem usar as interfaces ? Por uma questo muito simples:
voc precisa garantir a flexibilidade da sua aplicao, garantir que o
mesmo objeto possa ser instanciado de maneiras distintas em pontos
distintos da aplicao. Como voc tem uma interface List, voc tem
certeza dos mtodos que seu objeto tem, mesmo que ele seja
instanciado por uma classe como ArrayList ou LinkedList. Vamos
melhorar um pouco mais nossa Listagem 1, adicionando o uso de
Generics (Listagem 2).
Listagem 2. Usando Generics com ArrayList e List
import java.util.ArrayList;
import java.util.List;
/**
* @param args
*/
public static void main(String[] args) {
/*
* Agora adicionamos um Generic "<Carro>", assim s podemos
* adicionar objetos do tipo 'Carro' nossa lista.
*
* */
List<Carro> carros;
/*
* Criamos uma ArrayList apenas com carros
* */
carros = new ArrayList<Carro>();
/*
* Voc conseguir criar sem problemas um ArrayList
* sem passar o tipo Generic, mas a IDE ir dar um
* Warning dizendo que voc deveria passar um
* tipo Generic, para evitar erros em runtime.
* */
carros = new ArrayList();
/*
* O cdigo abaixo no ser compilado, erro em tempo de
* design. Pois nosso objeto 'carros' agora muito
* exigente: S aceita implementaes de List que tenham
* objetos do tipo 'Carro'. Estamos tentando fazer
* um 'cast' de Animal para Carro e
* isso no possvel.
* */
carros = new ArrayList<Animal>();
}
Para finalizar o uso do List, vamos mostrar alguns mtodos muito
utilizados no dia a dia. Observe aListagem 3.
Listagem 3. Uso de mtodos frequentes com List
import java.util.ArrayList;
import java.util.List;
/**
* @param args
*/
public static void main(String[] args) {
/*
* Imagine que desejamos adicionar uma lista de
* carros novos a nossa lista de carros,
* podemos adicionar todos de uma s vez, usando o 'addAll'
* */
carros.addAll(carrosNovos);
/*
* Verifica se o carro est na lista de carros.
* Mas como essa verificao feita ?
* Atravs do mtodo 'equals' do seu objeto carro.
* Sendo assim, na implementao do
* seu bean 'Carro', muito importante que voc
* sobreescreva o mtodo 'equals' dizendo
* como as comparaes devem ser realizadas.
* */
carros.contains(carro);
}
Esses mtodos mencionados acima so os usados com muita
frequncia, mas nada impede que voc faa um estudo em cada
mtodo.
Set e HashSet
Assim como o List uma interface e o ArrayList sua implementao, o
Set e HashSet seguem a mesma analogia, onde o Set a interface e o
HashSet sua implementao. Observe a Listagem 4.
Listagem 4. Usando Set
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
/**
* @param args
*/
public static void main(String[] args) {
Set<Carro> carros;
}
Voc j deve ter percebido que podemos implementar diferentes
instncias para uma mesma interface Set, obviamente que cada uma
tem sua peculiaridade e no foco deste artigo mostrar as
peculiaridades de cada implementao.
Uma diferena muito comum entre o Set e o List o retorno de
determinados elementos em uma posio exata da lista, pois com o List
podemos simplesmente fazer um 'get(index)' e voc ter o elemento X
na posio INDEX. Na Listagem 5 iremos demonstrar como percorrer
todos s elementos usando o iterator.
Listagem 5. Usando iterator para capturar elementos no Set
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
* @param args
*/
public static void main(String[] args) {
Set<Carro> carros;
/*
* Percorrer todo SET com iterator
* */
Iterator<Carro> carrosAsIterator = carros.iterator();
while (carrosAsIterator.hasNext()){
Carro it = carrosAsIterator.next();
}
}
}
No exemplo acima, abstraamos a maioria dos comentrios que j
fizemos nas listagens anteriores, assim tornamos o mesmo sucinto e
prtico. Veja na Listagem 6 um exemplo mais completo de como
trabalhar com Iterator.
Listagem 6. Trabalhando com Iterator
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
al.add("C");
al.add("A");
al.add("E");
al.add("B");
al.add("D");
al.add("F");
/**
* @param args
*/
public static void main(String[] args) {
Set<Carro> carros;
/*
* Percorrer todo SET com iterator usnado foreach
* */
for(Iterator<Carro> iter = carros.iterator();
iter.hasNext();) {
Carro carroAtual = iter.next();
}
}
A forma demonstrada acima uma alternativa ao while(it.hasNext())
que utilizamos nas listagens acima.
Com isso, o artigo aqui apresentado teve foco em maior parte do
tempo na prtica voltada aos recursos que estudados, deixando um
pouco a teoria de lado. Mas vale ressaltar que estudar os recursos (suas
classes, sendo mais especfico) muito importante para entender o
funcionamento como um todo, e no se ater somente ao descrito neste
artigo.