Dificuldade no Hashmap

Bom dia pessoas!
Seguinte eu tenho um cadastro simples, inserir, excluir, consultar e listar.
Eu fiz o seguinte

[code]public class cadastro {

	String menu = "\n MENU \n\n 1 - Novo \n 2 - Excluir \n 3 - Consultar \n 4 - Listar \n 5 - Sair.";
	int num = 6;
	int []array = new int[10];
	public void menu(){
		System.out.println(menu);
		cadastrocliente();
	}
	 HashMap<String, String> mapeamento = new HashMap<String, String>();
//--------------------------------------------------------------------------------------------------------//	
	public void cadastrocliente(){
		System.out.println("------------------------------------");
		int num = Leitor.lerInteger("Qual a opção: ");
		System.out.println("------------------------------------");
		switch(num)
		{
			case 1:{
				Novo();
				break;
			}
			case 2:{
				Excluir();
				break;
			}
			case 3:{
				Consultar();
				break;
			}
			case 4:{
				Listar();
				break;
			}
			case 5:{
				System.out.println("Você acaba de sair.");
				return;
			}
			default:{
				System.out.println("\n**NÃO EXISTE**");
			}
		}
		cadastrocliente();
	}		
//--------------------------------------------------------------------------------------------------------//	
	public void Novo() {
		 try {
			ClienteII ClienteII = new ClienteII();
			ClienteII.getCod_cliente();
			int cod_cliente = Leitor.lerInteger("Código do cliente: ");
			String nome_Cliente = Leitor.lerString("Nome do cliente: ");
			int tel_cliente = Leitor.lerInteger("Número do telefone: ");
			ClienteII c = new ClienteII();
			c.setCod_cliente(cod_cliente);
			c.setNome_Cliente(nome_Cliente);
			c.setTel_cliente(tel_cliente);

// mapeamento.put(“cod_cliente”,String.valueOf(cod_cliente));
// mapeamento.put(“nome_Cliente”, nome_Cliente);
// mapeamento.put(“tel_cliente”, String.valueOf(tel_cliente));

			HashMap<String, String>  mapeamento = new HashMap();
			mapeamento.put("codigo do cliente ",String.valueOf(" "+cod_cliente));
			mapeamento.put("Nome ",  " " +nome_Cliente);
			mapeamento.put("Telefone ",String.valueOf(" "+tel_cliente));
			
			String cod_cli_Property = mapeamento.get("codigo do cliente");
			String nome_Property = mapeamento.get("Nome");
			String tel_Property = mapeamento.get("Telefone");
			System.out.println(mapeamento);
			
			System.out.println("\nINSERIDO COM SUCESSO");
		 } catch (Exception e) {
			 System.out.println("\nErro ao inserir!");
		 }
	}
//--------------------------------------------------------------------------------------------------------//	
	public void Excluir(){
		try {
		 ClienteII clienteII = new ClienteII();
		 clienteII.getCod_cliente();
		 int cod_cliente = Leitor.lerInteger("Digite o código do cliente: ");
		 ClienteII c = new ClienteII();
		 c.setCod_cliente(cod_cliente);
		 	HashMap excluir = new HashMap();
		 	excluir.remove(cod_cliente);
			System.out.println("Excluido com sucesso!!");
		} catch (Exception e) {
			System.out.println("Erro!");
		}
	}
//--------------------------------------------------------------------------------------------------------//	
	public void Consultar(){
			ClienteII cl = new ClienteII();
			cl.getCod_cliente();
			cl.getNome_Cliente();
			cl.getTel_cliente();
			int c = 0;
			int cod_cliente = Leitor.lerInteger("Digite o código do cliente  ");
			            try {
			                c = Integer.parseInt(String.valueOf(cod_cliente));
			                if( !mapeamento.containsKey(c))
			                    throw new Exception();
			               
			                System.out.println("CÓDIGO: " + mapeamento.get(c));
			                System.out.println("NOME: " + mapeamento.get(c)+ cl.getNome_Cliente());
			                System.out.println("TELEFONE: " + mapeamento.get(c)+ cl.getTel_cliente());

// System.out.println();
}
catch( Exception e){
System.out.println(“Não existe aluno com essa matricula”);
}
} [/code]

Só que na hora da consulta não retorna nada… o que eu estou fazendo de errado?
e pra dizer bem a verdade não entendi muito bem esse HashMap.

OPa

Viajei no final (rsrs), é um cadastro de cliente mas eu coloquei como matricula de aluno…

:oops:

Primeiro as inserções na Hash são feitas da seguinte maneira, usando a variável que vc criou:

mapeamento.put(cod_cliente,nome_cliente);

o que vem antes da vírgula é a chave, para encontrar algo na tabela…
se você inserir como está ali no código, você estará colocando so dados da seguinte maneira

Chave Dado
“codigo do cliente " String.valueOf(” "+cod_cliente)

entende, quando você for buscar esse dado na tabela Hash, não vai mais encontrar, pois
só é possível buscar pela chave, se vc buscar pela String da chave, ele vai te retornar a tabela toda…

entendeu?

+/- tem como vc colocar um código pra ver se eu entendo?

rs

Espera agora eu li de novo e to vendo uma bagunça aqui…
pra que vc quer guardar os dados do cliente em uma Hash?

sendo que vc cria um cliente pra cada vez que é feito um cadastro…

Não seria mais inteligente guardar os cliente em uma ArrayList?

Ficaria mais ou menos assim…

[code] public void Novo() {
try {
int cod_cliente = Leitor.lerInteger("Código do cliente: ");
String nome_Cliente = Leitor.lerString("Nome do cliente: ");
int tel_cliente = Leitor.lerInteger("Número do telefone: ");
ClienteII c = new ClienteII();
c.setCod_cliente(cod_cliente);
c.setNome_Cliente(nome_Cliente);
c.setTel_cliente(tel_cliente);

             ArrayList<Cliente> lista_de_clientes = new ArrayList<Cliente>();
             lista_de_cliente.add(c);

             System.out.println("INSERIDO COM SUCESSO");  
          } catch (Exception e) {  
              System.out.println("Erro ao inserir!");  
          }  
     }  

[/code]

acho bem mais intuitivo

É que é um exercicio e pede pra utilizar o HashMap, mais eu nao entendi muito bem pra que serve então to tendo dificuldade pra entender…rs

Então com a Hash fica ria assim…

[code] public void Novo() {
try {
int cod_cliente = Leitor.lerInteger("Código do cliente: ");
String nome_Cliente = Leitor.lerString("Nome do cliente: ");
int tel_cliente = Leitor.lerInteger("Número do telefone: ");
ClienteII c = new ClienteII();
c.setCod_cliente(cod_cliente);
c.setNome_Cliente(nome_Cliente);
c.setTel_cliente(tel_cliente);

             HashMap<String, ClienteII> lista_de_cliente = new HashMap<String, ClienteII>();
             lista_de_cliente.put(cod_cliente,c);
             //Aqui eu coloco o código como chave para que eu possa encontrar meus dados novamente.

             System.out.println("INSERIDO COM SUCESSO");  
          } catch (Exception e) {  
              System.out.println("Erro ao inserir!");  
          }  
     }  

[/code]

acho bem mais intuitivo

[quote=Castellon] É que é um exercicio e pede pra utilizar o HashMap, mais eu nao entendi muito bem pra que serve então to tendo dificuldade pra entender…rs

[/quote]

O Hash é como ujma coleção, serve para que você armazene vários dados. Como se fosse um vetor, porém você pode armazenar o dado que quiser nele…
Se não me engano não implementa conceito de ordem…

Já leu algo sobre coleções?

não li nada a respeito não…

Mas já vou procurar algo a respeito rs
Vlw pela dica.

O código não cai na exceção ele aparece a mensagem “Inserido cm sucesso”,
só que na hora q eu escolha a opção CONSULTAR, ele cai na exceção…

[code]public void Consultar(){
ClienteII cl = new ClienteII();
cl.getCod_cliente();
cl.getNome_Cliente();
cl.getTel_cliente();
int c = 0;
int cod_cliente = Leitor.lerInteger("Digite o código do cliente ");
try {
c = Integer.parseInt(String.valueOf(cod_cliente));
if( !mapeamento.containsKey©)
throw new Exception();

			                System.out.println("CÓDIGO: " + mapeamento.get(c));
			                System.out.println("NOME: " + mapeamento.get(c)+ cl.getNome_Cliente());
			                System.out.println("TELEFONE: " + mapeamento.get(c)+ cl.getTel_cliente());

// System.out.println();
}
catch( Exception e){
System.out.println("-----------------------------------");
System.out.println(“Não existe cliente com esse código”);
}
} [/code]

Esse é o código.

mas é claro vê bem o que vc tá fazendo na hora de consultar…
dá uma olhada no tipo de retorno do método get da Hash
e veja se ta certo o que vc está fazendo para imprimir teu retorno

Eu achei um site interessante sobre coleções e esta me dando alguma luz…

Caso venha surgir mais duvidas volto a postar.

Vlw pela atenção.

basicamente Map é composto por um par chave-valor.
sendo que a chave não pode se repetir.
um HashMap é ordenado, porém, não em uma ordem muito conveniente…
ele é ordenado pelo código hash da chave.

vamos a um exemplo. (desconsidere a ordenação do código hash :D)
se você usar

put("chave1","valor1"); put("chave2","valor2");
terá a seguinte estrutura…

Keys - Values
chave1 valor1
chave2 valor2

agora vamos supor que você faça o seguinte na sequência…

put("chave1","valor3");

a representação do map ficará assim…

Keys - Values
chave1 valor3
chave2 valor2

note que não foi inserido um novo par chave - valor, mas sim sobrescrito o valor de “chave1”

resumindo…
se o objeto chave não existir no map, será inserido um novo par chave-valor,
se o objeto chave já existir, o objeto valor desse objeto chave será sobrescrito.

e como você está utilizando HashMap. Recomendo que você implemente o método hashCode para todos suas classes que você deseja usar como chave.

obs.: pode haver chave nula… porém, apenas uma…

put(null,"qualquerValor");

espero que tenha ajudado :smiley: