Salve! Salve!Pessoal! A partir de hoje darei inicio a uma série de post ao qual nomei: “REVISÃO SCJP”.
Espero que com essa série possa ajudar aos pré-SCJP rsrs.
O objetivo é abordar dicas e apresentar aquele assunto “chato” e demorado de aprender quando está estudando para ser um Sun Certified Java Programmer. Mas o post é recomendado também para os iniciantes Java já que mais cedo ou mais tarde vocês encontrarão o assunto Collection (independente da modalidade de estudo: livro/escola).
O assunto é bastante importante: “Conjuntos/Collection”. Em primeira instância abordarei um pouco a definição e em seguida apresento as classes e interfaces correspondentes. Por experiência própria não há outro segredo para aprender Conjuntos se você não praticá-lo incansavelmente. Aos estudantes SCJP pratique (muito++) e paralelamente associe toda parte teórica com a prática, lá vai uma dica abaixo:
Ex.: Se você está estudando a class ArrayList, pratique incansavelmente usando todos os métodos dessa class, crie códigos que lançam exceções e procure saber qual exceção é lançada. Outras que não compilam e saiba o porque.
Let’s GO…
Trabalhar com desenvolvimentos de sistemas e não envolver estrutura de dados é algo quase que impossível. Em algum momento você vai precisar armazenar informações e em outro buscá-las.
Todo programador já fez esse exercício:
Ex.1 “Crie um vetor de X posições e insira os seguintes dados […] e depois ordene, agora mostre o ultimo elemento”.
Ex.2 “Crie um vetor para armazenar nomes, porém não pode conter elementos repetidos […]”
Quando estamos iniciando os estudos como programador, solucionar esse exercício não pode ser algo tão simples em nível de programação.
Java possui algumas APIs que facilita a vida do programador, para que ele não queira “reinventar a roda”. Termine de ler o post e descubra por que…
Summary
The objective this article is presents a theory and practice about Collection in Java. If you is studying for SCJP is recommend the reading. There isn’t other form of the learn collection if you not practice. The students of the exam SCJP there will some questions about collection that can be easy or difficult depend of your level of study with this subject. In the end this article there are some example.
Definition collection: represents any structure of dados, where object are storage. (Kathy Sierra)
Pré-Requisito
– Instalação Java 1.5/superior
My Column Java – Imasters /Minhas Colunas Java – Imasters:
Mais um pouco sobre threads em Java
Criando uma aplicação Servlet & JSP – Netbeans 6
Criando pagina de erro em aplicações Java
Conjunto
Representa qualquer estrutura de dados, onde objetos são armazenados (Kathy Sierra).
Em um conjunto é possível: inserir, remover, buscar, recuperar objetos.
Conjunto pode ser:
Ordenado X Classificado:
– Ordenado: existe uma ordem para o conjunto seguir. Por exemplo, um conjunto de números inteiro segue 1..2…3.
– Classificado: ordem do conjunto por alguma regra de classificação. Por exemplo, class Carro, regra de classificação para os elementos armazenados nela pode ser pela cor, fornecedor, alfabeto, código de fabricação etc.
Em Java temos:
Collection – é uma INTERFACE. Onde Set, List e Queue derivam dessa interface. Métodos comuns add(), remove(), size().
Collections – é uma CLASS que armazena vários métodos estáticos utilitários como sort() que serve para ordenação dos elementos.
HashTable – essa class não é ordenada, mais segue uma lógica interna para determinar a ordem dos elementos com base nos códigos hashing. Os métodos dessa class são sincronizados e não aceita chaves nem valores null.
HashMap – aceita chaves e valores null, os métodos dessa class não são sincronizados e tendem a rodar mais rápido que HashTable. Chaves duplicada acaba gerando uma subscrição no valor.
HashSet – não existe uma ordenação na interação. Não aceita objetos iguais no conjunto desde que o código hashing seja implementado de forma eficiente.
ArrayList : é como um Array – mantém a ordem pelo índice.
LinkedHashSet : mantém a ordem pela inserção, não aceita duplicatas caso o código hashing esteja implementado de forma correta.
LinkedList:aceita duplicata e a ordem de iteração é por inserção.
PriorityQueue: Ordena os elementos usando prioridade definida pelo programador. Pode ser por: ordem natural dos elementos, implementação do java.util.comparator. Aqui é quebrada a idéia de FIFO em uma fila.
Métodos da classe PriorityQueue:
offer() à adiciona um elemento a fila.
Métodos que retorna null se estiverem vazio:
poll() à retorna o elemento com maior prioridade e remove
peek() à mostra o elemento com maior prioridade e não remove.
Esses lançam exceções não verificadas:
remove() à remove um elemento, se estiver vazio lança uma exceção.
element()à retorna o elemento na ponta da queue se estive vazia lança uma exceção
As interfaces correspondentes a cada Classe:
A Interface List: índice tem relevância.
Arraylist,Vector,LinkedList,
Interface Set: não aceita elementos duplicados
HashSet, LinkedhashSet, TreeSet(nao aceita null – TreeSet).
Interface Map: identificadores (Keys) exclusivos são relevantes.
LinkedHashMap e HashTable(métodos sincronizados), HashMap(aceita valores e chaves null).
Percebam a essência de usar conjuntos:
//Criarei poucos exemplos para não ficar um post muito grande, a idéia é mostrar a eficiência dos conjuntos.
Ex. 1
import java.util.ArrayList;
import java.util.Collections;
public class Locadora {
public static void main(String[] args) {
ArrayList<Integer> filmes = new ArrayList<Integer>();
filmes.add(10);
filmes.add(5);
filmes.add(35);
//método sort pertence a classe Collections há pedaginhas no exame perguntando quem é o pai desse método…
Collections.sort(filmes); System.out.println(filmes);
}}//imprime o conjunto ordenado simples não?
……………..
Ex. 2
//usando chaves, agora associei esse código com a teoria do HashMap abordada no inicio do post
import java.util.HashMap;
class Maphash{
public static void main(String agr[]){
HashMap<Integer,String>add = new HashMap<Integer,String>();
add.put(10,”tv”);
add.put(14,”som”);
add.put(10,”micro”);
//me retorne o cara com a chave 14
System.out.println(add.get(14));
System.out.println(add.size()); //me mostre o tamanho do meu conjunto
}}
…………………
Ex. 3
//Um exemplo mais “útil”: cadastrando produto
import java.util.Map;
import java.util.LinkedHashMap;
import java.util.Scanner;
class Loja{
static String info;
public static void main(String [] agrs){
Map<Integer,String> cad = new LinkedHashMap<Integer,String>();
Scanner dados = new Scanner(System.in);
int qtde=0;
int cadinfo=0;
int cont=0;
System.out.println(“quantos produtos deseja cadastrar “);
qtde = dados.nextInt();
while(cont<qtde){
System.out.print(“\n Digite o nome do Produto “);
info = dados.next();
cad.put(cadinfo, info);
cadinfo++;
cont++;
}
System.out.println(“total de produtos cadastrados “ + cad.size());
System.out.println(“imprimindo produtos cadastrado….”);
for(int a=0;a<cadinfo;a++){
System.out.println(cad.get(a));
}
System.out.println(“Codigos chaves dos produtos por ordem de insercao “);
System.out.println(cad.keySet());
System.out.println(“Remova um produto digite o codigo “);
int co = dados.nextInt();
cad.remove(co);
System.out.println(“total de produtos cadastrados “ + cad.size());
}}
<!–[if gte mso 9]> Normal 0 21 false false false PT-BR X-NONE X-NONE <![endif]–><!–[if gte mso 9]> <![endif]–> <!–[endif]–>
Bom pessoal! Vou ficando por aqui, espero que tenham gostado do post e até próxima serie REVISÃO SCJP! Não deixem de comentar: sugestões/criticas etc.
Conforme mencionei na semana passada, que estarei criando um pequeno summary de cada post para facilitar a vida da galera do fórum javaranch que também são leitores do blog.
Como não foi possível atender ao pedido de criar posts 100% em inglês (porém a vontade é grande, quem sabe ano que vem quando estarei formado?!) devido minha falta tempo achei o summary uma forma de apresentar o post e daí cada leitor decide se realizará a tradução conforme foi sugerido por um dos leitores. Ao experts no inglês que identificar algum erro no summary favor mandar uma sugestão, pois não estou usando tradutor. Já que considero mais uma forma de poder praticar o idioma.
Abraços!!
<!–[if gte mso 9]> Normal 0 21 false false false PT-BR X-NONE X-NONE <![endif]–><!–[if gte mso 9]> <![endif]–>
<!–[endif]–>