Collections Framework

Collections Framework

(Parte 1 de 7)

Coleções

Podemos definir coleção como a representação de um grupo de objetos, semelhante aos arrays. No entanto, as coleções são implementações que geralmente encapsulam arrays, oferecendo algumas facilidades como:

● busca; ● inserção;

● redimensionamento dinâmico;

● remoção de elementos;

● ordenação

Exemplos da utilização de coleções

Quando fazemos consultas em banco de dados e queremos armazenar os objetos que representam o resultado da consulta em um único objeto. Exemplo: A consulta de clientes por categoria pode retornar uma coleção de objetos cliente.

Mapeamento de relações 1 para muitos, ou seja, um cliente tem muitos endereços. Podemos dizer que um objeto do tipo Cliente tem uma coleção de objetos do tipo Endereco.

Vantagens na utilização de coleções

Não é necessário implementar métodos de ordenação, busca, redimensionamento e etc.

Normalmente, há a melhora na performance, pois provê implementações otimizadas criadas por especialistas.

Interface em Java

O que é uma interface?

● A interface é uma forma de especificação de comportamento de classes, onde definimos todos os métodos que devem ser implementados pela classe, garantindo que as classes que implementem a interface terão, obrigatoriamente, todos os métodos definidos na interface;

● Interfaces definem a forma como iremos interagir com as classes que a implementam;

● Interface é um protótipo de classe;

A Interface Collection (java.util.Collection)

A interface Collection é a especificação que representa um grupo de objetos chamados de elementos.

Existem diferentes implementações e sub-interfaces da interface 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

Esta interface é utilizada apenas como "objeto para polimorfismo" para que um método possa receber uma Collection genérica, ou seja, qualquer classe que a implemente ou uma de suas sub-interfaces.

Importância da Sobrescrita do hashCode e equals equals()

O que acontece quando comparamos dois objetos da mesma classe utilizando o operador == ?

Inicialmente, poderíamos acreditar que os atributos que compõe cada um dos objetos seriam comparados, retornando true se todos forem idênticos. Porém, a JVM verifica se a referência dos objetos é a mesma, ou seja, se os endereços de memória são iguais.

<<Interface>> Collection

<<Interface>>

List <<Interface>>

Set

De acordo com a documentação do JavaDoc da classe

Object, que define o método equals(), devemos sempre sobrescreve-lo levando em consideração as seguintes relações:

• Reflexão: x.equals(x) deve ser true para qualquer x diferente de null;

• Simetria: Para x e y diferentes de null, se x.equals(y) é true, então y.equals(x) também deve ser;

• Transitividade: Para x, y e z diferentes de null, se x.equals(y) é true, e y.equals(z) é true, então x.equals(z) também deve ser true;

• Consistência: Para x e y diferentes de null, múltiplas chamadas de x.equals(y) devem sempre retornar o mesmo valor;

• Para x diferente de null, x.equals(null) deve sempre retornar false

Vamos analisar alguns exemplo para entender o uso do método equals().

Pessoa.java public class Pessoa{ private String nome; private String RG; public Pessoa(String nome, String RG){ this.setNome(nome); this.setRG(RG); } public void setNome(String nome){ this.nome = nome; } public void setRG(String RG){ this.RG = RG; } public String getNome(){ return nome; } public String getRG(){ return RG; }

TestePessoa.java public class TestePessoa{ public static void main (String args[]){

System.out.println("p1 igual p2 com =="); } else{

Veja abaixo a saída gerada pela execução da classe TestePessoa.java.

Os objetos foram considerados diferentes pelo operador ==, embora contenham atributos idênticos, pois a referência aos objetos na memória heap é diferente.

Vamos analisar um novo exemplo, porém desta vez utilizando o método equals() herdado da classe Object.

TestePessoa.java public class TestePessoa{ public static void main (String args[]){

if (p1.equals(p2)){ System.out.println("p1 igual p2 com equals da classe Object"); else{ System.out.println("p1 != p2 com equals da classe Object");

Veja abaixo a saída gerada pela execução da classe

TestePessoa.java, agora com a utilização do método equals da classe Object.

p1 != p2 com equals da classe Object

A comparação utilizando o método equals apresentou o mesmo resultado daquele que utilizou o operador ==. Isto aconteceu porque o método equals, herdado da classe Object, emprega o operador == para comparar objetos.

(Parte 1 de 7)

Comentários