Verificar se valor de um objeto existe no map [RESOLVIDO]

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