Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Dúvida - HashMap

Amigos,

Gerei um exemplo aqui, onde tenho duas contas (ContaCorrente e ContaPoupanca) com o mesmo nome (String) de responsável ("Roberval"). Fazendo a busca no Map, me retorna somente o nome da primeira conta adicionada. Como posso fazer para me retornar o nome de todas as contas com o nome "Roberval" ?Abaixo a chamada, o método e o resultado. O resto do código é o básico, definição do Hash, criação de contas, método para adicionar no Hash e no array.

System.out.println(bamerindus.buscarPorNome("Roberval"));
    public Conta buscarPorNome(String nome){
        return mapaDeContas.get(nome);        
    }

Resultado:

Conta: 2 - Nome: Roberval - Saldo: R$0

Obrigado!

6 respostas

Amigos,

Olhando no java doc achei o keySet() do HashMap que retorna os valores do map. Mas ele não mostra nomes repetidos.

Coloquei para mostrar, mas só trás 1 Roberval. Onde na verdade são 2, tenho 2 contas em nome de Roberval.

[Paulo, Pedro, Roberval, Mario]
solução!

Olá Vitor,

quando você foi adicionar as contas no mapaDeContas, a chave usada tanto na conta corrente quanto a conta poupança foi o nome "Roberval"? Se sim, então a segunda conta não foi adicionada no mapa. O problema é que a chave em qualquer estrutura Map é única, ou seja, só pode haver uma única chave "Roberval". Então a segunda conta ele sequer colocou detro de mapaDeContas.

Se você quer ter as duas contas com mesmo nome usando a estrutura de HashMap, você precisa usar algum outro valor como chave que seja diferente para cada conta, por exemplo o número da conta. E depois se quiser buscar todos as contas que possuem o nome "Roberval", você chamaria o método values da interface Map, que te devolve todos os valores que foram adicionados no mapa, que neste caso são todas as contas. E então percorreria com um laço esses valores procurando por cada conta que possui o nome "Roberval".

Ou então para não se preocupar em escolher uma chave única diferente do nome para usar o HashMap, você poderia usar uma implementação de List mesmo que permite duplicidade. Mas de qualquer forma precisará percorrer a lista procurando por contas que tem o nome "Roberval".

Lucas

Primeiramente obrigado. Ja deu uma clareada rs. Alterei o K do Map para Integer. E adicionei o numero da conta.

A questão que quando chamo o mapaDeContas.values() ele mostra o Hash:

[br.banco.contas.ContaCorrente@15db9742, br.banco.contas.ContaPoupanca@6d06d69c, br.banco.contas.ContaPoupanca@7852e922, br.banco.contas.ContaPoupanca@4e25154f, br.banco.contas.ContaPoupanca@70dea4e]

E como estou buscando pela String nome, como eu posso fazer esta busca? Nos valores K/V do Map, estão como Integer e Conta. Mesmo fazendo um laço. eu não sei por onde chamar para mostrar a string nome de cada conta.

Luis,

Consegue meu amigo.

Fiz o laço pelo getNome.

mapaDeContas.get(i).getnome() !!

Olá Vitor,

tem que sempre lembrar que no Java, ele nunca passa o objeto inteiro quando vai passar como parâmetro de um método, ou adicionar no array, ou colocar no mapa etc. Ele sempre trabalha com referências para o objeto. Então esse br.banco.contas.ContaCorrente@15db9742 nada mais é que um hash que representa a referência da posição de memória onde está este objeto do tipo Conta Corrente.

E dentro do objeto você não tem só nome, tem também número, agência e saldo. Quem que você pode chamar para pegar o nome de uma conta?

É isso mesmo, era só chamar o getNome() =]

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software