Percorrer HashMap

4 respostas
I

Boa tarde a todos, estou começando a programar em Java e não estou achando uma maneira de resolver um exercício que tenho aqui.
É o seguinte:
tenho meus objetos Contribuintes e cada uma tem um imposto a pagar, quando crio o obj coloco ele em um HashMap e agora preciso saber qual desses obj que estão dentro do meu Hash é o que tem maior imposto, eis ai minha dúvida: como percorrer um HahMap?

Agradeço desde já.

4 Respostas

T

Para percorrer um Map, use um iterador. Vou dar três alternativas.

// Percorrendo um map pelas chaves
Map<Integer, Contribuinte> contribuintes = new HashMap<Integer, Contribuinte>();
...
for (Integer codContribuinte  : contribuintes.keySet()) {
    Contribuinte c = contribuintes.get (codContribuinte );
    ....
}
// Percorrendo um map pelas entradas
Map<Integer, Contribuinte> contribuintes = new HashMap<Integer, Contribuinte>();
...
for (Map.Entry<Integer, Contribuinte> entrada : contribuintes.entrySet()) {
    Integer codContribuinte = entrada.getKey();
    Contribuinte c = entrada.getValue();
    ....
}
// Percorrendo um map pelos valores (mas aí você não vai ter as chaves!)
Map<Integer, Contribuinte> contribuintes = new HashMap<Integer, Contribuinte>();
...
for (Contribuinte c  : contribuintes.values()) {
    ....
}
I

desculpe mais não consegui entender os códigos, no último exemplo vc disse que eu não vou ter as chaves, o que eu preciso depois de percorrer meu Hash é retornar o contribuinte com maior imposto, posso utilizar este ultimo?
Se vc poder explicar melhor agradeço

T

Tá bom, vamos lá.

// Percorrendo um map pelas chaves
Map<Integer, Contribuinte> contribuintes = new HashMap<Integer, Contribuinte>();
double imposto = 0.0;
Contribuinte contribuinteComMaiorImposto = null;
for (Integer codContribuinte  : contribuintes.keySet()) {
    Contribuinte c = contribuintes.get (codContribuinte );
    if (c.getImposto() > imposto) {
        contribuinteComMaiorImposto = c;
    }
}
System.out.println (contribuinteComMaiorImposto.toString());
// Percorrendo um map pelas entradas
Map<Integer, Contribuinte> contribuintes = new HashMap<Integer, Contribuinte>();
double imposto = 0.0;
Contribuinte contribuinteComMaiorImposto = null;
for (Map.Entry<Integer, Contribuinte> entrada : contribuintes.entrySet()) {
    Integer codContribuinte = entrada.getKey();
    Contribuinte c = entrada.getValue();
    if (c.getImposto() > imposto) {
        contribuinteComMaiorImposto = c;
    }
}
System.out.println (contribuinteComMaiorImposto.toString());
// Percorrendo um map pelos valores (mas aí você não vai ter as chaves!)
Map<Integer, Contribuinte> contribuintes = new HashMap<Integer, Contribuinte>();
double imposto = 0.0;
Contribuinte contribuinteComMaiorImposto = null;
for (Contribuinte c  : contribuintes.values()) {
    if (c.getImposto() > imposto) {
        contribuinteComMaiorImposto = c;
    }
}
System.out.println (contribuinteComMaiorImposto.toString());
I

Tentei implementar do ultimo jeito e fiz assim:

Map<Integer, Contribuinte> contribuintes = new HashMap<Integer, Contribuinte>();  
        double imposto = 0.0;  
        contribuinteComMaiorImposto = null;  
        for (Contribuinte c  : contribuinteHash.values()) {  
            if (c.getImposto() > imposto) {  
                contribuinteComMaiorImposto = c;  
            }  
        }
        jLabel22.setText(contribuinteComMaiorImposto.getNome());

esta é parte que crio o objeto e adiciono no hash.

contribuinte = new Contribuinte(jtNome.getText(), 
                                        jCUF.getSelectedIndex(),
                                        jtCPF.getText(), 
                                       Float.parseFloat(jtRenda.getText()));
        contribuinteHash.put(jtNome.getText(),contribuinte);

Desculpe minha ignorancia com Java é que fazem apenas 3 meses que estou trabalhando com java e OO antes trabalhava com ASP e JS

Criado 3 de abril de 2009
Ultima resposta 3 de abr. de 2009
Respostas 4
Participantes 2