Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Orientada a Objetos. 1 Prof.Fábio Rener Coleções em Java. Métodos hashCode e equals. A implementação correta dos métodos hashCode e equals é muito importante na utilização de coleções, os métodos contains, removeAll, remove, entre outros.....falham quando equals não esta corretamente implementado e perdem performance ou falham quando hashCode não esta otimizado ou corretamente implementado. java.util.Collection A interface Collection é a especificação que representam um grupo de objetos, chamados de elementos. Existem diferentes implementações e sub-interfaces da inteface collection que oferecem vantagens e desvantagens, dependendo da situação, podemos encontrar coleções com as seguintes características: • Algumas permitem elementos duplicados e outras não. • Algumas são ordenadas e outras não. • Algumas permitem a inserção do elemento null e outras não. Programação Orientada a Objetos. 2 Prof.Fábio Rener java.util.List A interface List define uma coleção ordenada, também conhecida como seqüência. Por isto, quando utilizamos objetos que implementem esta interface, obtemos o controle sobre a posição em que os elementos são inseridos, sendo possível acessá-los através de um índice inteiro (posição na lista). Normalmente as classes que implementam esta interface permitem elementos duplicados e elementos null. Índice List 0 1 2 N Cliente 1 Cliente 3 Cliente 2 Cliente n java.util.ArrayList É uma implementação da interface List, onde o tamanho do array pode ser alterado em tempo de execução. Quando utilizamos ArrayList é permitida a inserção de todo tipo de elementos, inclusive null. Esta classe não é synchronized, portanto não é segura para acesso de dados de maneira simultânea, sendo esta a principal diferença da classe java.util.Vector. Construtores: • ArrayList(): Constrói um ArrayList vazio, com capacidade inicial de 10 posições; • ArrayList (Colection c): Constrói um ArrayList contendo os objetos da Collection c; • ArrayList (int initialCapacity): Constrói um Arraylist vazio com a capacidade inicial igual a initialCapacity; Adicionando elementos ao ArrayList • void add (int i, Object obj): inserção do objeto obj na posição i; • boolean add(Object o): adiciona o objeto na ultima posição do ArrayList; Verificando se o ArrayList contem determinado elemento • boolean contains (Object obj): Retorna true se o ArrayList possui o objeto obj. A análise é baseada no método equals implementando na classe de obj. Programação Orientada a Objetos. 3 Prof.Fábio Rener Recuperando um elemento do ArrayList • Object get (int pos): Retorna o elemento que está na posição pos do ArrayList; • Int indexOf (Object elem): Retorna a posição do elemento no ArrayList. Removendo elementos do ArrayList • Object remove (int index): Remove o elemento que estiver na posição index. Verificando o tamanho do ArrayList • Int size (): Retorna o número de elementos do ArrayList. java.util.ArrayList e java.util.Vector As duas oferecem, basicamente, a mesma funcionalidade, no entanto, Vector oferece acesso sincronizado e, dessa maneira, podemos ter acesso simultâneo com segurança. No entanto, o sincronismo tem seu preço, isto é, torna a manipulação do Vector mais lenta que o ArrayList. Por isso, caso não exista a necessidade de acessos simultâneos, prefira o uso de ArrayList, ao invés de Vector. Exemplo: Endereco.java package br.anhanguera.poo; public class Endereco { private String rua; private int numero; public Endereco(String rua, int numero) { this.setRua(rua); this.setNumero(numero); } public int getNumero() { return numero; } public void setNumero(int numero) { this.numero = numero; } public String getRua() { return rua; } public void setRua(String rua) { this.rua = rua; } Programação Orientada a Objetos. 4 Prof.Fábio Rener @Override public String toString() { return "Endereco [numero=" + numero + ", rua=" + rua + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + numero; result = prime * result + ((rua == null) ? 0 : rua.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Endereco other = (Endereco) obj; if (numero != other.numero) return false; if (rua == null) { if (other.rua != null) return false; } else if (!rua.equals(other.rua)) return false; return true; } } ExemploArrayList.java package br.anhanguera.poo; import java.util.ArrayList; public class ExemploArrayList { public static void main(String[] args) { //instancia de endereco Endereco end1 = new Endereco("Av. Bernadino de Campos", 32); //instancia de endereco Endereco end2 = new Endereco("Rua. Raul Jordão ", 73); //instancia de endereco Endereco end3 = new Endereco("Av. Duque de Caxias", 408); //monta lista de endereco ArrayList<Endereco> lista = new ArrayList<Endereco>(); lista.add(end1); lista.add(end2); lista.add(end3); //imprime todos os elementos da lista imprimeElementos(lista); System.out.println("\n ====== removendo o elemento de indice"); Endereco endRemovido = lista.remove(1); Programação Orientada a Objetos. 5 Prof.Fábio Rener System.out.println("Endereco removido >> " + endRemovido); imprimeElementos(lista); } private static void imprimeElementos(ArrayList<Endereco> lista){ System.out.println("\n Numero de elementos " + lista.size() ); System.out.println("\n Imprimido todos os enderecos: "); for (int i = 0; i < lista.size(); i++) { System.out.println("(" + i + ") ==> " + lista.get(i)); } } } Exercícios 1) Crie uma lista ordenada(ArrayList) para a classe Aluno com os seguintes atributos(nome,ra,matricula), adicione alguns Alunos nessa lista e mostre os dados. 2) Crie uma lista ordenada para a classe Pessoa com os seguintes atributos(nome,idade,telefone), adicione algumas Pessoas nessa lista e mostre os dados. 3) O que faz o método contains do ArrayList ? 4) Explique a importância do método equals para uso de collections ? 5) Qual a diferença entre ArrayList e Vector ?
Compartilhar