HashMap

15 respostas
andresmafra

como retornar um dado de um hashMap, que método eu uso??

como faço uma comparação com uma variavel, para saber se a mesma é igual a chave do hashmap?

por exemplo:

int x = Integer.parseInt(JOptionPane.showInputDialog("Coloque o código da compra: ")); 

HashMap hm = new HashMap; 

for(int i =0; i< hm.size();i++) 
{ 
if(x == hm.get(i)) // aqui esta o erro, não retorna nada! 
{ 
return //continua.... 
} 
}

poderiam me explicar por favor???

Abç!!

15 Respostas

Naruffy

não retorna nada porque você não colocou nada no mapa,
e para pegar valores de mapa não precisa de laço, é só você saber qual foi a chave que você colocou nele,

exemplo:

Map<Integer, String> mapa = new HashMap<Integer, String>();
        mapa.put(1, "A");
        mapa.put(2, "B");
        .
        .
        .
        
        //para pegar
        mapa.get(1); //aqui irá retorna "A"
M

Prezado amigo! Evite repetir tópicos para não causar confusão e dar trabalho até a você mesmo!
Como o colega acima falou, você não colocou nenhum valor no mapa, não há o que imprimir!
Atenciosamente,
MaLSan

andresmafra

Prezados!!

Eu ja coloquei valores no hashmap, só que nao detalhei o código inteiro, por exemplo este metodo é só para compara o que o usuario digita, e se tiver no hash, ele retorna…

eu preenchi o hashmap com uma string proveniente de uma concatenação de ArrayList, e a sua chave é randômica!

sera que tem algum problema??

exemplo:

String s ="";

for(int i=0; i< array.size();i++)
{
     s = array.get(i)+"\n";
}

hm.put(codrandom,s);

esta certo?

Abç! e valeu por tudo!

Giulliano

CHAVE RANDÔMICA ??? E COMO VC SABE QUAL É A CHAVE ???

PRA QUE VC QUER USAR O HASH MAP ???

T

Amigo, você AINDA NÃO entendeu o que é um HashMap.

Você normalmente não varre um HashMap (com um “for”) para procurar alguma coisa dentro dele. Sacou? O “for” é para procurar coisas dentro de um ArrayList ou de um array, não dentro de um HashMap.

Para saber se um HashMap contém alguma coisa, use o método “containsKey”. Se ele retornar false, então a tal chave não existe.
Uma outra forma de procurar algo dentro de um HashMap é usar o método “get”. Se ele retornar null, então a chave não existe.

M

O problema não é Java, é Estruturas de Dados!!!
Num Mapa você acondiciona pares de Chave e Valor, depois, passa uma chave para receber o valor correspondente!
Que quis dizer com “chave randômica”!!! Você gera as chaves randômicamente!!! Por que!!!
Quem te garante que não vai gerar duas vezes a mesma chave e sobrescrever o valor?!!!
Publica aí mais claramente o que você quer saber que a galera deve solucionar!
Atenciosamente,
San

andresmafra

Entao galera, consegui resolver o problema, como nosso colega falou, utilizando um método containsKey()!!

Mas mesmo assim valeu mesmo pela ajuda!!

Outra coisa, essa parte sobre mapas, arrays, é java basico, intermediario ou avançado??

ABÇs!

M

É Java básico, companheiro! Não tão básico quanto um Hello world, mas báisco…
Entretanto, não se apoquente. Por vezes aprendemos uma série de coisas sofisticadas antes de conhecermos um ou outro detalhe fundamental!
Quando precisar, é só contar com a ajuda da galera do GUJota!!!
Atenciosamente,
San

T

Eu acho que é básico. Todo programador Java deve conhecer e saber como se usam* pelo menos as seguintes classes e interfaces do Java Collections Framework:

Interfaces Collection, List, Set, Map, SortedSet, SortedMap, Comparable, Comparator, Iterator
Classes ArrayList, HashSet, HashMap, TreeSet, TreeMap, Map.Entry, LinkedHashSet, LinkedHashMap
Classes utilitárias: Arrays, Collections

Note que não estou listando “LinkedList” - na prática você vai achar poucos usos para LinkedList. E não menciono “Vector” ou “Hashtable” porque dentro da medida do possível você deve usar, respectivamente, ArrayList e HashMap.


  • Não estou falando em “decorar o javadoc” - assim como você não usa mais lápis e papel para fazer contas, você não precisa decorar o javadoc, basta tê-lo sempre disponível. Consigo programar sem uma IDE (Eclipse ou NetBeans), mas não consigo programar sem o JavaDoc.

** Se for estudar para uma prova de certificação, não se esqueça de “PriorityQueue”, “Deque” e “Stack”.

M

Falou e disse, thingol!!!

andresmafra

Opa!!!

Vlw mesmo hein galera, sempre que precisar de ajuda vou postar aqui sim, vcs sao melhores do que o professor!
rssssssss

mesmo assim, abçs!

G

ola pessaol
qual a melhor versão para se aprender java
poderia me mandar o download
grato.

R

oi ai esta meu codigo

import java.io.*;           
            import java.util.HashMap;    
            import java.util.ArrayList;      
            import java.util.List;      
            import java.util.Map;      
            //import javax.swing.JOptionPane;     
          
          
                         
          public class Dados{               
                       
                  
              //"args" é um array de String onde cada elemento é um argumento passado pela linha de comando momento na "inicialização" da execução.    
              public static void main(String[] args){               
                      
                      
                 Map<Integer, List<String>> mapLines= new HashMap<Integer, List<String>>();         
               try {               
                 //leitura do ficheiro, prepara-o para ser aberto    
                 BufferedReader in = new BufferedReader(new FileReader("conteudo.txt"));               
                 String str;           
                 int i = 0;           
                 //vai percorrer todo o ficheiro    
                 while((str = in.readLine()) != null)               
                 {                     
                     if(str.startsWith("#"))    
                     {                     
                         str= "";                     
                     }                     
                     else{     //esta a dividir a frase em varias strings imprimindo o seu resultado    
                          List<String> values = new ArrayList<String>();         
                              String words[] = str.split(";");             
                              for(String word : words) {             
                                  values.add(word);     
                                  System.out.println(word);    
                              }         
                              mapLines.put(i, values);         
                              i++;         
                     }       
               }// fim do while                               
                 in.close();               
             }  catch (IOException e){               
                 // possiveis erros são tratatos aqui     
                 //JOptionPane.showMessageDialog(null, this.word, "NÂO FOI POSSÍVEL ABRIR O SEU FICHEIRO", JOptionPane.ERROR_MESSAGE);      
                 System.out.println("ERRO-->NÃO FOI ENCONTRADO O SEU FICHEIRO DE DESTINO,TENTE DE NOVO");            
             }          
             // Apresenta o contéudo do Map         
             Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();         
             for(Integer key : m.keySet()) {         
                 for(String word : m.get(key)) {         
                     System.out.println(word);         
                 }         
             }                  
             }     
              public static void main2(String[] args){               
                      
                      
                  Map<Integer, List<String>> mapLines= new HashMap<Integer, List<String>>();         
               try {               
                            
                 BufferedReader in2 = new BufferedReader(new FileReader("conteudo2.txt"));               
                 String str;           
                 int i = 0;           
                 while((str = in2.readLine()) != null)               
                 {                     
                     if(str.startsWith("#"))                     
                     {                     
                         str= "";                     
                     }                     
                     else{     //esta a dividir a frase em varias strings    
                              List<String> values = new ArrayList<String>();         
                              String words[] = str.split(" ");             
                              for(String word : words) {             
                                  values.add(word);    
                                  System.out.println(word);    
                              }         
                              mapLines.put(i, values);         
                              i++;         
                     }       
               }// fim do while                               
                 in2.close();               
             }  catch (IOException e){               
                 // possiveis erros são tratatos aqui      
                 System.out.println("ERRO-->NÃO FOI ENCONTRADO O SEU FICHEIRO DE DESTINO,TENTE DE NOVO");    
             }          
             // Apresenta o contéudo do Map         
             Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();         
             for(Integer key : m.keySet()) {         
                 for(String word : m.get(key)) {         
                     System.out.println(word);         
                 
                  }       
          
              }    
          }    
      }

e tenho por exemplo este ficheiro

961234567 253883377 24:05:2011 10:30:10 068 16 13    
       963456789 253883355 28:05:2011 12:15:17 088 12 09    
       963456789 253883377 29:05:2011 17:00:00 120 14 11    
       969876666 253883377 30:05:2011 10:05:34 070 11 09    
       961234567 253883377 31:05:2011 22:30:05 066 14 11    
       961234567 253883377 02:06:2011 14:19:41 076 15 13    
       963456789 253883377 05:06:2011 11:33:34 085 07 06

e queria que fosse pedido ao utilizador que dados e que ele quer imprimir. por exemplo...pedirmos para imprimir todos os dados com o numero 961234567

abraços

ederfreitas
thingol:
Amigo, você AINDA NÃO entendeu o que é um HashMap.

Você normalmente não varre um HashMap (com um "for") para procurar alguma coisa dentro dele. Sacou? O "for" é para procurar coisas dentro de um ArrayList ou de um array, não dentro de um HashMap.

Para saber se um HashMap contém alguma coisa, use o método "containsKey". Se ele retornar false, então a tal chave não existe.
Uma outra forma de procurar algo dentro de um HashMap é usar o método "get". Se ele retornar null, então a chave não existe.

Pode não ser uma boa prática mas é possível sim, se você quiser apresentar todos os registro de um Map, você poder utilizar o código abaixo:

Map<Integer, String> reg = new TreeMap<Integer, String>();
	
	 for(int i = 1; i<=10;i++){
		    reg.put(i, "Teste "+i);
	 }
	
	 for(Integer key: reg.keySet()){
		    System.out.println("Chave: "+key+" -- Valor: "+reg.get(key));
	 }
Com ele você obterá todas as chaves e valores de um Map
R

obrigado... mas nao sei como encaixar no código...eu pus e ele no fim assim

.....
           in2.close();           
       }  catch (IOException e){           
           // possiveis erros são tratatos aqui  
           System.out.println("ERRO-->NÃO FOI ENCONTRADO O SEU FICHEIRO DE DESTINO,TENTE DE NOVO");
       }      
       // Apresenta o contéudo do Map     
       Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();     
       for(Integer key : m.keySet()) {     
           for(String word : m.get(key)) {     
               System.out.println(word);     
       
            }   

        }
    
    }

public static void main3(String[] args){  
  
Map<Integer, String> reg = new HashMap<Integer, String>();  
      
    for(int i = 1; i<=10;i++){  
        reg.put(i, "teste"+i);  
    }  
      
    for(Integer key: reg.keySet()){  
        System.out.println("Chave: "+key+" -- Valor: "+reg.get(key));  
}
}}

ele faz isso

Chave: 1 -- Valor: teste1
Chave: 2 -- Valor: teste2
Chave: 3 -- Valor: teste3
Chave: 4 -- Valor: teste4
Chave: 5 -- Valor: teste5
Chave: 6 -- Valor: teste6
Chave: 7 -- Valor: teste7
Chave: 8 -- Valor: teste8
Chave: 9 -- Valor: teste9
Chave: 10 -- Valor: teste10

eu tenho entao o ficheiro

961234567 253883377 24:05:2011 10:30:10 068 16 13
963456789 253883355 28:05:2011 12:15:17 088 12 09
963456789 253883377 29:05:2011 17:00:00 120 14 11
969876666 253883377 30:05:2011 10:05:34 070 11 09
961234567 253883377 31:05:2011 22:30:05 066 14 11
961234567 253883377 02:06:2011 14:19:41 076 15 13
963456789 253883377 05:06:2011 11:33:34 085 07 06

e agora como faço para que o programa peça ao utilizador para que ele escolha quais linhas ele quer imprimir.

abraços

Criado 18 de junho de 2008
Ultima resposta 28 de jun. de 2011
Respostas 15
Participantes 8