[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]
[code]
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);[/code]
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);
...
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);
}