Serie SCJP:Conjuntos/Collection – Java

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:

Instalando Tomcat em 10min

Mais um pouco sobre threads em Java

Criando Servlet Netbeans 6

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]–>

14 comentários em “Serie SCJP:Conjuntos/Collection – Java”

  1. Parabéns Camilo, seu blog está muito legal, continue com essa iniciativa!!!
    Parabéns mais uma vez.
    um abraço

    Ícaro Santos

  2. Parabéns Camilo !!
    Muito boa a sua iniciativa com este blog.
    Gostei de suas postagens, bem simples e direto !!
    É bom saber que podemos contar com pessoas assim !!

    O blog já está fazendo parte dos meus favoritos !!

    Parabéns e continue assim!!
    Abraços !!

  3. olá Ygor,
    Primeiramente obrigado por acessar o blog! E fico feliz em saber que o mesmo está contribuindo para os leitores…

    Fico grato! qualquer sugestão de tema so enviar um email…

    flw! Abraço!

  4. Camilo muito legal da sua parte compartilhar os seus conhecimentos todos os assuntos estão me ajudando muito!!! Estou estudando para a certificação e tem muitas dúvidas que consigo tirar com o blog..
    Continue assim…
    Abraço

  5. Parabéns Cara. Seu blog tá muito bacana. É uma força pra quem deseja aprender Java.
    Abraço…

  6. Ola Camilo.
    Me recordo há alguns anos atrás, pra ser exato entre 02 e 03, nos falamos por msn, você estudando para certificação e eu também.

    Maneiro saber que você já tirou a sua e esta ae passando informação e ‘experiência’ para a galera no seu blog. Muito bacana a iniciativa.

    Eu tive algumas mudanças de rumo, mas já estou de volta e firme, muito firme rumo aos SCJA e SCJP, inclusive estou estudando utilizando um resumo que você fez, quando estudava para SCJP.

    Parabéns!!!

    Abs,
    ermelo007@hotmail.com

  7. opa! Rodrigo! lembro sim! cara! Fico feliz em saber que os resumos estao servindo hehe! E boa sorte nesse novo caminho ai SCJA e SCJP, eu quero tirar SCJA ano q vem, pq estou em periodo de monografia, entao nao dar para se dedicar a certificacao. Mas boa sorte nos estudos!

    abraço 😀

  8. Haw!

      Valeu pelo post. Só uma coisinha: é Sun Certified Java Programmer, não Sun Certified Programmer Java. E onde consta "método sort pertence interface Collections" no Ex. 1 não seria classe Collections.

      Mais uma vez valeu pelo post, já for pro delicious.

    Flwz!?

  9. opa! acho que na hora estava pensando em interface e acabei escrevendo hehe! Agora a respeito do Sun certified… é que no meu certificado veio assim o java apos o programmer e na minha carteirinha tb!

    E obrigado por acessar o blog e fazer as sugestoes!

    abraços 😀

  10. Olá Camilo, estou no inicio dos estudos para certificação SCJP e seu blog ,didático e organizado, está sendo muito utíl. acabei criando um blog tbem com o objetivo de organizar bons conteúdos encontrados na net, justamente sobre java e TI . Obrigado por compartilhar seu conhecimento.

Deixe um comentário para Ygor França Cancelar resposta

O seu endereço de e-mail não será publicado.