HashMap

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ç!!

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" 

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

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!

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

PRA QUE VC QUER USAR O HASH MAP ???

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.

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

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!

É 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

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”.

Falou e disse, thingol!!!

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!

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

oi ai esta meu codigo

[code] 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);         
             
              }       
      
          }    
      }    
  }  [/code]  

e tenho por exemplo este ficheiro

[code]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 [/code]   

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

[quote=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.

[/quote]

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:

[code] 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));
 }[/code]

Com ele você obterá todas as chaves e valores de um Map

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

[code]…
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> m = new HashMap<Integer, List>();
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));  

}
}}
[/code]

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