5COP088 – Laboratório de Programação Aula 13 – Java 5COP088 Laboratório de Programação Aula 13 Genéricos e Conjuntos Java Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – [email protected] 1 5COP088 – Laboratório de Programação Aula 13 – Java Sumário: 1) Métodos hashCode(), equals() e toString(); 2) Conjuntos; 3) Genéricos; 4) Resumo. Sylvio Barbon Jr – [email protected] 2 5COP088 – Laboratório de Programação Aula 13 – Java 1) Métodos hashCode(), equals() e toString() - TODAS as classes estendem Object; - equals(), hashCode() e toString() são métodos públicos de Object; - Sobrescreva toString() para implementar o retorno de métodos comoSystem.out.println(); - Use o equals() para determinar se dois objetos são equivalentes; - Quando sobrescrever o equals() use o operador instanceof para certificar-se de que está comparando objetos de classe apropriada, exemplo: public boolean equals( Object obj ) { if ( obj instanceof Retangulo) { Retangulo rect = (Retangulo) obj ; return rect.width == width && rect.height == height ; } else { return false ; Sylvio Barbon Jr – [email protected] }} 3 5COP088 – Laboratório de Programação Aula 13 – Java 1) Métodos hashCode(), equals() e toString() - Quando sobrescrever equals() deve-se sobrescrever hashcode(), as classes HashMap, HashTable, HashSet, LinkedHashSet e LinkedHashMap. - Uma sobrescrição válida de hashCode() distribuirá chaves de forma igualitária em vários depósitos. 2) Conjutos - Atividades comuns: Inserção, remoção, verificação de objetos incluídos. - Collection -> interface estendida por Set e List; - Collections -> Uma classe que armazena métodos utilitários estáticos. - Quatro versões básicas: 1) Lista (pode ser ordenada, com repetição e com índice); 2) Fila (Ordenados por FIFO ou por prioridade); Sylvio Barbon Jr – [email protected] 4 5COP088 – Laboratório de Programação Aula 13 – Java 2) Conjuntos 3) Conjunto (pode ser ordenada ou classificada e repetição Não é permitida); 4) Mapa (pode ser ordenada ou classificada e repetição de chave NÃO é permitida); *ordenada = obedecendo uma ordem específica não-aleatória; *classificada = alfabeticamente, numericamente ou por critério do programador; - Principais características das Classes: 1) ArrayList = iteração e acesso aleatório rápido; 2) Vector = Como um ArrayList, porém mais lento devido a métodos sincronizados; 3) LinkedList = Adequado para a inserção de elementos ao final (pilhas e filas); 4) HashSet = Não fornece ordenamento e assegura itens não repetidos; Sylvio Barbon Jr – [email protected] 5 5COP088 – Laboratório de Programação Aula 13 – Java 2) Conjuntos 5) LinkedHashSet = Sem itens duplicados e iteração por ordem de inserção. 6) TreeSet = Sem itens duplicados itera na ordem classificada. 7) HashMap = Atualizações rápidas, permite itens nulos. 8) Hashtable = HashMap mais lento pela sincronização e não permite valores nulos. 9) LinkedHashMap = Iterações mais rápidas, itera por ordem de inserção ou último item acessado, permite chave e itens nulos. 10) TreeMap = HashMap classificado; 11) PriorityQueue = Lista ordenada por prioridade - A iteração deve ser feita pelo for aprimorado ou com um Iterator (hasNext()): for( String s : ListaStrings){ while(IteratorLista.hasNext()) { Object elemento = IteratorLista.next(); } } Sylvio Barbon Jr – [email protected] 6 5COP088 – Laboratório de Programação Aula 13 – Java 2) Conjuntos - As filas usa: 1) offer() – para adicionar elemento; 2) poll() – para remover o primeiro da fila; 3) peek() – verifica o primeiro da fila; - A classificação pode ser feita na ordem natural, por meio de um Comparable ou de vários Comparators: 1) Implemente Comparable usando compareTo() e forneça uma classificação: public class Pessoa implements Comparable { private int pessoa_id; private String nome; @Override public int compareTo(Pessoa o) { Pessoa p = (Pessoa ) o; return this.pessoa_id – o.pessoa_id ; } Sylvio Barbon Jr – [email protected] } 7 5COP088 – Laboratório de Programação Aula 13 – Java 2) Conjuntos 2) Crie vários Comparators para classificar uma classe de várias formas (compare()): public class OrdenadorPessoa implements Comparator{ public int compare(Object o1, Object o2) { Pessoa p1 = (Pessoa) o; Pessoa p2 = (Pessoa) o; return p1.getPessoaId() - p2.getPessoaId(); } } - A classe Collections e Arrays apresentam o método sort() para ordenação; - A classe Arrays.asList() cria um List a partir de um array. - Collections.reverse() inverte a ordenação dos elementos de uma lista. Sylvio Barbon Jr – [email protected] 8 5COP088 – Laboratório de Programação Aula 13 – Java 3) Genéricos - Permitem garantir a segurança de tipos, delimitando o uso de uma Collection. - Ex. ArrayList<Animal> pode aceitar referências de Cachorro, Gato ou qualquer outro tipo de Animal. - Não é possível realizar atribuições polimórficas, exemplo: List<Animal> listaAnimal = new ArrayList<Cachorro>. - Ao se usar a implementação List<?>, qualquer tipo genérico pode ser atribuído à referência, mas apenas para acesso e não para modificações. - Comparação: Sylvio Barbon Jr – [email protected] 9 5COP088 – Laboratório de Programação Aula 13 – Java 4) Resumo Sylvio Barbon Jr – [email protected] 10 5COP088 – Laboratório de Programação Aula 13 – Java 4) Resumo Sylvio Barbon Jr – [email protected] 11 5COP088 – Laboratório de Programação Aula 13 – Java Referências Deitel,P.; Deitel, H. Java Como Programar. 5a edição. SCJP Certificação Sun para programador- Kathy Sierra https://www.youtube.com/watch?v=yfcyeY-jQbI https://www.youtube.com/watch?v=dY99vOs86Jc