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

A busca – metodologia de estudo

Salve! Salve! Pessoal!  Para começar a semana! resolvi montar mais um post sobre estudo(s) para auxiliar, aos colegas, visitantes e amigos, que querem buscar um e-mail para estudar de forma disciplina e produtiva. Claro que o exposto aqui, é apenas minha experiência, e materias de que li sobre especialistas na área.

let’s go..

Alguns colegas me perguntam onde encontrei “tantas” metodologias de estudo para área?! Bom primeiro foi usar o velho Google, e daí buscar artigos, discussão etc. Em primeiro momento não fazia um filtro no que encontrava simplesmente arquivava e depois imprimia lia todos e separava o que considerava útil para meus estudos e meu perfil.

Outro ponto importante é não se conformar com os resultados na primeira tentativa, sempre buscar mais, porém o ponto importante é como pesquisar? Usar palavras relacionadas ao que deseja influencia em encontrar novos materiais. Veja alguns exemplos:

 

Como estudar

Dicas para estudo

Estudando em casa

 

Vimos que os resultados sofreram alterações e nisso você pode encontrar ótimo, excelente matérias, com dicas para estudo (consultar apenas a primeira pagina do Google, não é o suficiente).

Mas um ponto chave é que as metodologias encontradas servem para uns mais não pode servir para outros. Porém ajuda a encontrar a sua.

Há pessoas que somente estuda com um professor, com um amigo, ou em grupo. Há outras que prefere estudar sozinho sem ninguém por perto. Porém isso é algo muito pessoal. E há pessoas que tem uma vontade enorme de estudar usando livros, apostilas, web buscando economizar $$, porém falta disciplina. Ou seja, não adianta ter uma estante de livros (os mais conceituados), porém faltar à disciplina. Mas se você tem vontade então busque a disciplina e descubra como seu cérebro armazena as informações da melhor forma possível. O cronograma que desenvolvi e que mais se adequou a minha modalidade de estudo de acordo com meu tempo livre (durante a semana, feriados e finais de semana). Outro fator que considero importante é traçar metas e buscar alcançá-la. Tem que ter disciplina para fazer as atividades de cada dia e não deixar acumular. Não perder o foco é fundamental.

No meu caso, cada semana é um cronograma novo de acordo com o período especificado e são segmentados, durante a semana estudo X e nos finais de semana Y.

 Todas as sextas-feiras, faço “estudo do final da semana”, e todos os domingos desenvolvo os estudos da semana e caso tenha ficado  algo pendente da ultima semana acrescento de imediato.

Enfim independente qual seja sua maneira de estudar você vai precisar de alguma metodologia para evoluir seu conhecimento de maneira mais rápida e isso vai exigir um esforço físico e psicológico. Há um ditado assim: “sem esforço, não há recompensa” conhecido no inglês como: “No pain no gain”.

 

Dicas que pesquisei

 

Espero ter ajudado aqueles que buscam, ou querem melhorar seus estudos.  Mas é importante lembrar que nada aqui foi comprovado cientificamente, são apenas nomeações que serviram para me, mas para você não pode servir.

Até a próxima!

Bye!

Boas práticas de programação Assert

Salve! Salve! Pessoal! Hoje vou falar Assert – Assertions. Quem está estudando para certificação ou java 1.5 / superior , em algum capitulo vai se deparar com a tecnica de assert. Mas a questão que ja vi  é: Para que serve mesmo? Parece que é igual ao comando if/else. Não consigo entender…
Bom vou buscar nesse post explicar um pouco da tecnica com base no livro Certificação Java – exame 310-055 – da kathy.

let’s go…

 A partir da vesão 1.4, o recurso de assertivas (assert) permitirão que você teste suposições durante o desenvolvimento sem o desgaste de escrever manipuladores para exceções que se supõe nunca ocorrerão, uma vez que o programa tiver saído da fase de desenvolvimento e for totalmente distribuído.

Se você não quer perder tempo ou trazer impacto ao desempenho do programa escrevendo um código de manipulação de exceções ou não deseja teste IF/else já que se chegar a condição else, significa que a lógica anterior falhou então  as assertivas permite que você teste suas suposições durante a fase de desenvolvimento.

 

Assertivas funcionam de maneira bem simples sempre que você quer ter certeza que o valor testado jamais pode vai ser falso caso contrario m erro  AssertionError (que não é possível manipular) é lançado.

assert (boolean) : string;

Entre (  ) sempre terá que ser um valor booleano e true, caso contrario uma exceção é lançada (AssertionError).

Por padrão assert vem desabilitado para desfrutar do recurso é necessário ativá-lo.

1.Compilando

javac  -source 1.5 classe.java

2.Habilita

java –ea classe

ou

java –enableAssertion minhaclss

3.Desabilita

java –de classe

ou

java –disableAssertion classe

Regras de uso Assert:

-Assertion não pode ser usado no lugar do IF

-Assertion não pode testar métodos públicos ou argumento digitado pelo usuário

-Não pode apresentar efeitos colaterais* no programa. Ou seja, o seu programa deve rodar tanto com ele habilitado ou não.

 Usar assertivas capazes de causar efeitos colaterais pode levar a alguns dos bugs mais enlouquecedores e difíceis de encontrar (Kathy Sierra, 2006)

Não é objetivo de assertivas substituir o uso IF/ELSE, tratamentos de exceções. O uso de assertivas é no ambiente de desenvolvimento (debug) e não distribuição.

Na prática:

class Asert{

      private static void setD(int z){

            boolean b=true;

            assert(z>0):” alguém alterou o valor da linha 3 “;

            assert(b=false);

            System.out.println(z);

      }

      public static void main(String args[]){

            setD(1);

      }}

………………

class Assert{

      //usando assertivas    

      public static void main(String args[]){       

            int taxajuros=4;

            assert(taxajuros==2):“algum programador mudou o valor da int taxajuros na linha 6”;

            System.out.println(true);

      }}

Agora basta compilar com assert, e ativar em tempo de execução! E verificar a essência desse recurso.

Eu mesmo tenho habito de usar assertivas, acho uma boa pratica de programação. Espero que tenham gostado e até a próxima!!

Emprego em T.I sem Experiência?

Salve! Salve! Pessoal! Bom mais um final de semana chegando e aproveitando para atualizar o blog! Algumas pessoas estranharam a demora de atualização do blog! Conforme no ultimo post informei  que por alguns problemas de saude, entao nao seria possivel, atualizar o blog tres vezes na semana. Queria ter postado ontem, porem fiquei impossibilitado. Mas acredito que em breve estarei de volta a todo vapor!
Hoje resolvi falar sobre o processo de sem experiencia como conseguir um emprego em T.I? A maioria dos profissionais seja de T.I ou nao ja passou por isso e passam por isso, entao resolvi montar esse post, para motivar aqueles que acreditam que sem experiencia nao  sao capazes de conseguir um bom emprego!

let’s go…

Esse é um tema bastante discutido em diversos locais (físicos/virtual). Mas a questão é consigo emprego sem ter experiência comprovada?

A resposta é sim. É claro que consegue, sabemos que de 10 vagas umas 8 pede experiência + 3, + 5 anos etc. Mas por causa disso que você não vai tentar a vaga se em termos de conhecimentos técnicos você conhece e domina muito bem?

Há uma carência por profissionais no mercado e na área de T.I não é diferente e por que será? Advinha….

Conhecimento é o divisor de águas e custa caro, leva tempo e dedicação e isso não está acessível a todos. Uns tem dinheiro o suficiente para comprar quantos livros achar conveniente sem se importar com o preço, estudar nas faculdades mais conceituadas do país (os pais bancam), porém não tem dedicação e muito menos saco para ficar horas e horas estudando e ainda bem que não é possível comprar. Levando em conta isso, no final do post há algumas vagas e veja que se você não se candidataria caso tivesse um sólido conhecimento, mas não tivesse a experiência exigida. Não deixe que as experiências divulgadas pelo R.H faça  desistir de algo, falo isso por que recentemente um colega meu desistiu da carreira de T.I por esse fato. Lembre-se de uma coisa sem conhecimento você não consegue nem trabalhar como porteiro ( não discriminando a profissão pelo contrario). Então veja que o conhecimento é algo muito importante e mais valorizado que a experiência. Mas não descarto que a experiência é algo fundamental, ou seja, conhecimento + experiência se completam. Porém considero o conhecimento superior a experiência.

Olhando esse exemplo tire suas conclusões:

“Você contraria um desenvolvedor com 5 anos de experiência  mais seus códigos, são uma gambiarra, que se  cara fica doente o projeto dele, ninguém consegue dar manutenção…”

Agora:

“Tem um desenvolvedor que não tem nem um ano de experiência mais é um cara que se atualiza sempre, utiliza as boas praticas de programação, segue as nomeações da tecnologia, e gambiarras é algo distante do seu ambiente de desenvolvimento…”

Qual contratar?

Minha decisão seria sem duvida nenhuma o desenvolvedor sem experiência. Como dizem os engenheiros de software 80%  tempo  gasto  está na manutenção.

Então desenvolvedor sem experiência não deixe que uma descrição de uma vaga, impeça de tentá-la. Vá que o recrutador não execute aqueles procedimentos robóticos para seleção como acontece. Sempre converso com o depto de R.H da empresa onde trabalho, o maior problema de encontrar um bom profissional está nos métodos aplicados pelo R.H quase todos utilizam as mesmas tácticas e que em minha opinião não são eficientes uma boa parte.  Vamos pensar se você que um desenvolvedor e acha um cara que demonstra no currículo sólido conhecimento nas áreas  que a empresa precisa o que custa, colocar esse desenvolvedor em 1 dia para fazer um teste  do tipo desenvolver uma aplicação X, fazer analise de requisito etc. disponibilizar uma boa maquina com as ferramentas, já configuradas pelo pessoal de produção e largar o cara o dia todo lá. Se ele entregar a solução (sem gambiarras), você em médio prazo terá um bom um bom desenvolvedor + experiência e com isso em pouco tempo sua necessidade de contratar novos profissionais estaria estabilizada e com menor pressão da diretoria. O tempo gasto pelo R.H com uma vaga leva ate 6 meses e esse processo atrasa o crescimento da  empresa, do departamento e faturamento.. Mais isso daria um novo post, aqui somente umas dicas para alguns recrutadores que visitam o blog :D.

Desenvolvedor sem experiência valorize o quanto você sabe e esteja preparado para qualquer tipo de teste dentro do que foi exposto no seu currículo (não minta por que o teste pode ser elaborado de maneira especifica e nesse momento se mentiu a mascara vai cair).

VAGAS:
Vaga para Analista Desenvolvedor JAVA, em 03/03/2008 
 

– Vaga: Analista Desenvolvedor:
– Requisitos: Java, Struts, Modelagem de Dados, UML
– Desejável: PL-SQL, JSF
– Jornada: 44 horas semanais (de segunda a sábado)
– Remuneração: R$3.000,00 (CLT)

RH DP TEC
rhdptec@gmail.com

  Vaga para Analista Desenvolvedor Jr, em 04/03/2008 
Estamos recrutando Profissionais com o seguinte perfil:
Vaga: Analista Desenvolvedor:
– Requisitos: Java, Struts, Hibernat, Javascript.
– Experiência mínima de 1 ano
– Desejável conhecimento: Oracle

Os interessados devem encaminhar os Currículos para: recrutamento@altis.org.br
Título do e-mail: Desenvolvedor Java JR
Fernanda Villas – Bôas
Recursos Humanos
Centro de Alta Tecnologia e Inovação em Software – ALTIS
Visite nosso site: http://www.altis.org.br

Vaga para Analista Programador Sênior JAVA, em 04/03/2008  

Pessoal,
estamos com novas oportunidades para atuação junto a tecnologia Java.

Local: VIVO-BA
Cargo: Analista Programador Sénior
Carga horária: 8h por dia ( 40h por semana)
Salário: a combinar (Acima da média do mercado)
Atividades: Atuar junto ao processo de análise e desenvolvimento de grandes sistemas de abrangência nacional.
 

Tecnologias: UML, JSE 5.0, JEE 1.4, JBoss 4.x, WebLogic 9.x, EJB 3.0

Interessado favor enviar e-mail para bruno.simon.meta@vivo.com.br / itania.ferrer@metainf.com.br  Frase do SEBRAE: “com conhecimento você vai longe!” 

Ditado popular: “água mole em pedra dura, quanto bate ate que fura”

 Quero deixar claro que não quis dizer que a experiência não é importante, mais apenas alertar aqueles que acham que sem ela você é um profissional sem valor. Há cargos que a experiência é muito importante como: engenheiros de software, gerente de software, infelizmente sem experiência nessas áreas o risco  de contratar um profissional que nunca liderou uma equipe por exemplo e não teve nem 100h de experiência se torna arriscado.
Mais no geral veja as considerações feitas aqui para programadores, desenvolvedores etc. onde acho que é possível contratar  o profissional mesmo sem experiência de 1 ano, desde que ele compense isso no nível de conhecimento .

Flw! Espero ter contribuindo mais vez! E até a próxima!! Bom final de semana a todos

Começar JSE, JEE OU JME?

Salve!Salve! Mais uma semana, e mais um dia de blog! Hoje venho falar, sobre qual xícara tomar? Qual rumo vale apena arriscar.
Claro que o exposto aqui vai ter ser adaptado para cada região/estado/cidade. Mas o que quero transmitir é que um profissional de T.I deve saber qual xícara tomar de acordo com o momento (ambiente). Espero que o artigo venha contribuir diretamente/indiretamente em sua carreira/estudos.

let’s go…

O primeiro caminho antes do JSE, JME, JEE normalmente é esse. Após ter passado por ele, você está livre a escolhe a área que deseja atuar. Porém para uns não é uma tarefa fácil. E realmente não pode ser, vá que a escolha seja em longo prazo? E você não precisa de algo para longo prazo e sim curto ou médio. Então qual será a xícara?

Um ponto importante é analisar o mercado onde pretende atuar, qual é a real demanda? O que as consultorias RH daquela região buscam? Que tipo de tecnologia é auge (JME, JSE, JEE)?.

“antes de querer ir caçar com uma pistola, é bom saber que tipo de bicho pode encontrar por lá.”

Em síntese: por que caçaria dinossauro com uma pistola? Por que estudaria JME agora se na região que pretendo trabalhar está rolando altas vagas para JEE e quase não tem vaga para JME?

Hoje temos vários sites de empregos uns bastante conceituados, onde é possível encontrar tudo que precisa saber como:

– o que estudar?

– qual xícara tomar?

No Brasil a maior xícara é JEE, a demanda por JSE é muito pequena, já JME vem ganhando cada dia mais espaço.

Para cada 10 vagas 8 são pra JEE. Mas por causa disso que você não vai estudar as outras tecnologias?Claro que NÃO. Estude como hobby, com uma cara horária menor que JEE(por exemplo), mas estude o importante é está adquirindo conhecimentos já que não sabemos o dia de amanhã e nem a oportunidade que pode surgir. Hoje o mercado de JME não está fervendo, a partir de amanhã ele pode começar a ferver do nada, os avanços tecnológicos, não dar para prevê com exatidão quando vão acontecer.

Lembre-se:“conhecimento nunca é demais”

Uma curiosidade é que na Europa há muito projetos para JSE, chega a ser muito superior que os projetos aqui no Brasil por exemplo.

Acho que a ordem para estudos com bases sólidas (não fazer uma janelinha, ou imprimir Hello World!) seria:

  1. JSE: não levar a profundo o estudo, aprenda de forma intermediário, que pelo menos consiga fazer uma aplicação com acesso a Banco de dados etc. Enfim algo bem funcional.
  2. JEE: aqui será suas refeições, então nem preciso comentar muito né?
  3. JME: pode ser um hobby para brincar no final de semana.

Outro ponto a observar é que o número de materiais para JEE desde livros, artigos etc. É mais elevado que as outras duas tecnologias. Sem falar que lançamentos de livros para JEE têm um velocidade maior.

Flw! Pessoal, espero que o post tenha ajudado para a escolha da xícara!

P.s: por está meio adoentado as atualizações do blog vão ocorrer apenas em dois da semana. Desde já agradeço a compreensão de todos.