boa tarde
gostaria de saber o seguinte…
tenho um hashmap<Integer, Telefone> e queria saber se tem alguma forma de usar o metodo containsValue para comparar uma String telefone com o conteudo do objeto telefone usando o metodo referido…
estou usando assim
private boolean telefoneExiste(String telefone) {
for (Telefone tel : dao.getTelefones().values()) {
if (telefone.equals(tel.getTelefone())) {
return true;
}
}
return false;
}
mas queria saber se tem algum jeito de fazer o modo que desejo…
vlw
Não dá pra fazer assim?
private boolean telefoneExiste(String telefone) {
// Trata antes pra ver se o map não é nulo
Telefone t = new Telefone( telefone ); // Construtor que recebe o numero de telefone como parametro
dao.getTelefones().values().contains( t );
}
[quote=bsl.lacerda]Não dá pra fazer assim?
private boolean telefoneExiste(String telefone) {
// Trata antes pra ver se o map não é nulo
Telefone t = new Telefone( telefone );
dao.getTelefones().values().contains( t );
}
[/quote]
Cara tentei aqui não deu certo, mas acredito que não iria dar…
Pq ele esta comparando na verdade valor da referencia neste caso fraga…
E ai o interior do Objeto…aonde tem o valor desejado a se comparar não ser realmente comparado…
Acho que talvez somente do meu jeito infelizmente…
Mas se alguem achar que estou errado e se tiver mais soluções…
Vlw
Você tem que sobrescrever o método equals da classe Telefone.
Ex:
class Telefone{
String numero;
Telefone(String numero){
this.numero = numero;
}
@Override
public boolean equals(Object obj) {
return obj instanceof Telefone &&
((Telefone)obj).numero.equals( this.numero );
}
[quote=bsl.lacerda]Você tem que sobrescrever o método equals da classe Telefone.
Ex:
[code]
class Telefone{
String numero;
Telefone(String numero){
this.numero = numero;
}
@Override
public boolean equals(Object obj) {
return obj instanceof Telefone &&
((Telefone)obj).numero.equals( this.numero );
}
[/code][/quote]
Agora sim cara, show de bola…
private boolean telefoneExiste(String telefone) {
return dao.getTelefones().containsValue(new Telefone(telefone));
}
Ficou assim, usei o metodo containsValue…
Não tem problema em usar este né?
Sobre fazer um override na classe modelo do telefone eu ja vi livros indicando que se deve fazer um sobscrito nesses metodos
equals
hashcode
toString
So não tinha usado isso antes…
To editando o post pra saber se é possivel usar este codigo ou se o seu é melhor…
@Override
public boolean equals(Object obj) {
return ((Telefone) obj).getTelefone().equals(this.telefone);
}
Obrigado cara
Beleza.
O HashMap usa o método hashcode para armazenar os objetos que são inseridos no Map para agilizar a busca.
Todos os elementos que possuem o mesmo hascode são armazenados em um container específico.
Quando ele acessa o container identificado pelo hashcode do objeto, ele usa o método equals para verificar se o elemento é igual ao que você está pesquisando.
Ou seja, se você for usar HashMap é bom implementar o método equals e hashcode.
[quote=bsl.lacerda]Beleza.
O HashMap usa o método hashcode para armazenar os objetos que são inseridos no Map para agilizar a busca.
Todos os elementos que possuem o mesmo hascode são armazenados em um container específico.
Quando ele acessa o container identificado pelo hashcode do objeto, ele usa o método equals para verificar se o elemento é igual ao que você está pesquisando.
Ou seja, se você for usar HashMap é bom implementar o método equals e hashcode.[/quote]
Vão ver se eu entendi…
Então quer dizer que é gerado um hashcode para a key e o value?
E por isso que não pra colocar 2 valores iguais de chave no hashmap?
E tipo se eu inserir um valor tipo 100 e depois de novo 100…vao ter o mesmo valor de hashcode?
Pq eu entendi uma vez lembro sobre hashcode é gerado um codigo sobre o que é armazenado…
Seria isso ou estou bem errado?
Valeu pela id