Estudo para certificação – Capítulo 07

Esse é a sétima parte de uma série de posts que irei fazer.
Nesses posts, vou colocando um resumo ou talvez até mesmo trechos na íntegra do livro: Certificação Sun para Programador Java 6 da Kathy Sierra e Bert Bates.

Obs: Caro leitor, você não deve ter como base para uma certificação Java apenas a leituras desses meus resumos em meu blog. É de suma importância a leitura por completo do livro, bem como a realização de alguns simulados.

Capítulo 7 – Genéricos e Coleções.

1) Sobrescrevendo hashCode() e equals().
– equals(),hashCode() e toString() são public.
– Use == para determinar se duas variáveis de referência apontam para o mesmo objeto.
– Use equals() para determinar se dois objetos são significativamente equivalentes.
– Se você não sobrescrever equals(), dois objetos diferentes não poderão ser considerado iguais.
– Quando sobrescrever equals(),use o operador instanceof para se certificar de que está avaliando uma classe apropriada.
– Quando sobrescrever equals(),compare os atributos significativos dos objetos.
– Se x.equals(y) for verdadeiro, x.hashCode() == y.hashCode() deve ser verdadeiro.
– As variáveis transient não são apropriadas para equals() e hashCode().

2) Coleções
– List de itens: Ordenada, repetição permitida, com um índice.
– Set de itens: Podem ou não ser ordenados e/ou classificados e a repetição não é permitida.
– Map de itens com chaves: Podem ou não ser ordenados e/ou classificados e a repetição de chave não é permitida.
– Queue de itens a serem processados: Ordenados por FIFO(First-in First-out) ou por prioridade.

3) Atributos Principais das Classes Comuns de Coleção
– ArrayList: iteração e acesso aleatório rápidos.
– Vector: Como um ArrayList um pouco mais lento, devido a seus métodos sincronizados.
– LinkedList: Adequado para a inserção de elementos ao final, ou seja, para pilhas e fila.
– HashSet: Assegura a não existência de duplicatas, não fornece ordenação.
– LinkedHashSet: Sem duplicatas, itera na ordem de inserção.
– TreeSet: Sem duplicatas, itera na ordem de classificação.
– HashMap: Atualizações mais rápidas(pares chave/valor), permite uma chave null e muitos valores null.
– HashTable: Com um HashMapmais lento(métodos sincronizados. Nenhum valor ou chave null é permitido.
– LinkedHashMap: Iterações mais rápidas, itera por ordem de inserção ou último item acessado. Permite uma chave null e muitos valores null.
– TreeMap: Um mapa classificado.
– PriorityQueue: Uma lista de objetos ordenada pela prioridade dos elementos.

4) Usando Classes de Coleção
– As coleções só podem armazenar
– Faça iterações com loop for aprimorado, ou com um Iterator via hasNext() e next().
– hasNext() determina se existem mais elementos, o Iterator não se move.
– next() retorna o elemento seguinte e move o Iterator adiante.
– Para funcionarem corretamente, as chaves de um Map devem sobrescrever equals() e hashCode().
– As filas usam offer() para adicionar um elemento, poll() para remover o primeiro item da fila, e peek() para ver o primeiro item da fila.
– A partir do Java 6, TreeSets e TreeMaps têm novos métodos de navegação como floor() e highter().
– É possível criar/estender sub-cópias ‘vinculadas’ de TreeSets e TreeMaps.

5) Classificando e Pesquisando em Arrays e Listas
– A classificação pode ser feita na ordem natural, ou através de um Comparable ou de vários Comparators.
– Implemente Comparable usando compareTo().
– Crie vários Comparators para classificar uma classe de várias formas, implemente compare().

6)Classes Utilitárias: Collections e Arrays
– Ambas fornecem um método sort(). Classifica usando um Comparator ou usando a ordem natural.
– Ambas fornecem um método binarySearch(). Busca em um array ou List pré-classificado.

7) Genéricos
– Os genéricos lhe permitem forçar a segurança de tipos, em tempo de compilação(typesafe), para conjuntos(ou outras classes e métodos declarados usando-se parâmetros de tipos genéricos).
– Um ArrayList pode aceitar referências do tipo Dog, Cat ou qualquer outro subtipo de Animal(subclasse ou, se Animal for uma interface).
– Ao usar coleção genéricos, não é necessária uma conversão(cast) para se obter elementos(de tipo declarado) a partir da coleção.
– Lembre-se de que ‘compila sem erros’ não é o mesmo que ‘compila sem avisos’. No exame, um aviso de compilação não é considerado como erro ou falha de compilação.
– As atribuições polimórficas aplicam-se somente ao tipo-base, e não ao parâmetro de tipo genérico.
Você pode usar
List aList = new ArrayList();
Mas não
List aList = new ArrayList();
– A sintaxe dos coringas permite que um método genérico aceite subtipos(ou supertipos) do tipo declarado no argumento do método.
void addDog(List<? extends Dog) {} // Pode usar Dog ou Beagle.
– A palavra-chave extends, na condição coringa é usada para significar ou 'estende' ou 'implementa'. Assim, Dog pode ser uma classe ou uma interface.
– Ao se usar coringa, o conjunto pode ser acessado, mas não modificado.
– List refere-se apenas a um List, enquanto que List podem armazenar qualquer tipo de objeto, mas apenas para acesso.
– As convenções de declaração para genéricos usam T para tipo e E para o elemento, em relação a coringas.
– O identificador de tipo dos genéricos pode ser usado em declarações de classes, métodos e variáveis.
– Você pode declarar um método genérico usando um tipo não definido na classe:
public T void makeList(T t) {}
não está usando T como o tipo de retorno. Esse método tem um tipo de retorno void, mas para usar T dentro do argumento do método você deve declarar o , o que acontece antes do tipo de retorno.


Principal referência:

SIERRA, Kathy; BATES, Bert. Certificação Sun para Programador Java 6 – Guia de estudo – SCJP EXAME 310-065. Rio de Janeiro: Alta Books Editora, 2011.

Não deixem de verificar os próximos capítulos.
Valeu pessoal!

Anúncios

Obrigado pelo comentário.

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s