Dúvidas sobre o uso do Map

6 respostas
Fernanda_Morais

[list]Estou fazendo um trabalho pra faculdade que precisa usar Map
e não consigo fazer a remoção do cadastro de um cliente. Alguém
pode me ajudar? Cliente é a chave e telefone o valor.[/list]

public class Central {
  private Map colecao = new HashMap();

  // Método para cadastrar um Cliente e seu telefone
  public void cadastra(Cliente cliente, TelResidencial telefone) {
    colecao.put(cliente, telefone);
  }
 // Método para remover o cadastro de um cliente
  public Object remove(Object key) {
    return colecao.remove(key);

6 Respostas

Marky.Vasconcelos

Qual o erro?

H

Para que um Map que é um conjunto funcione, você precisa implementar
os métodos equals e hashCode da classe que você construiu.

Fernanda_Morais

[list]Ok, eu já fiz isso...[/list]

public class Cliente implements Comparable {
private String nome;
private String sexo;

  public Cliente(String nome, String sexo) {
    this.nome = nome;
    this.sexo = sexo;
    
  }
public String toString(){
  
  return "Cliente: " + nome + "\nSexo: " + sexo;
}
public int hashCode(){
  return nome.hashCode();
}
public boolean equals (Object obj){
  if (obj == null)
    return false;
  if (!(obj instanceof Cliente))
    return false;
  //Comparando o nome dos clientes
  Cliente temp = (Cliente) obj;
  return this.nome.equalsIgnoreCase(temp.nome);
}
public String getNome() {
  return nome;
}
public String getSexo() {
  return sexo;
}
public int compareTo(Object obj) {
 Cliente temp = (Cliente) obj;
 return this.nome.compareToIgnoreCase(temp.nome);
}
}
public class TelResidencial {
private int ddd;
private int numTelefone;

  public TelResidencial(int ddd, int numTelefone) {
   this.ddd = ddd;
   this.numTelefone = numTelefone;
  }
  public String toString(){
    return "DDD: " + ddd + "\nTelefone Residencial: " + numTelefone;
  }

}
T

Na prática não gosto muito de usar HashMap; prefiro usar TreeMap porque eu preciso normalmente definir um método (compareTo) de uma classe que implementa Comparator, em vez de definir hashCode e equals.

Vou dar um exemplo, em que dois clientes são iguais se seus códigos forem iguais, e onde os clientes são ordenados, por padrão, pelo seu código numérico.

class Cliente {
    private int codigo;
    public int getCodigo () ....
    public void setCodigo (int codigo) ....
}
public class Central {
  private Map<Cliente, Telefone> colecao = new TreeMap<Cliente, Telefone>(new Comparator<Cliente> () {
     public int compare (Cliente cli1, Cliente cli2) {
         return cli1.getCodigo() - cli2.getCodigo();
     }
  });

  // Método para cadastrar um Cliente e seu telefone
  public void cadastra(Cliente cliente, TelResidencial telefone) {
    colecao.put(cliente, telefone);
  }
 // Método para remover o cadastro de um cliente
  public Object remove(Object key) {
    return colecao.remove(key);
...
Fernanda_Morais

[list]No caso do meu trabalho o cliente é inserido por nome e não código,
e se eu usar o HashMap mesmo, como posso remover um cliente da lista?[/list]

T

Hum, se você tiver 2 clientes chamados “João da Silva”, então …

De qualquer maneira, supondo que você não atenda a nenhum João da Silva, ou você mate todos os Joões da Silva exceto um, você pode definir equals e hashCode como:

public int hashCode() {
    return nome.toUpperCase().hashCode();
}
public boolean equals (Object obj) {
    if (obj == this) return true;
    if (obj == null) return false;
    if (obj.getClass() != Cliente.class) return false;
    return ((Cliente) obj).nome.equalsIgnoreCase (this.nome);
}
Criado 21 de novembro de 2007
Ultima resposta 21 de nov. de 2007
Respostas 6
Participantes 4